当前位置: 首页 > news >正文

手机网站建设市场报价/网络营销模式下品牌推广途径

手机网站建设市场报价,网络营销模式下品牌推广途径,比wordpress轻量的,wordpress建站工具一、文档参考:框架介绍 (sa-token.cc) 框架生态——开源项目 (sa-token.cc) 二、与SpingBoot整合 1、创建项目 在 IDE 中新建一个 SpringBoot 项目,例如:sa-token-demo-springboot(不会的同学请自行百度或者参考:Sp…

一、文档参考:框架介绍 (sa-token.cc)

框架生态——开源项目 (sa-token.cc)

二、与SpingBoot整合

1、创建项目

        在 IDE 中新建一个 SpringBoot 项目,例如:sa-token-demo-springboot(不会的同学请自行百度或者参考:SpringBoot-Pure)

2、添加依赖

        这个是springboot web 项目使用的一个依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

         引入sa-token依赖:

<!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-boot-starter</artifactId><version>1.35.0.RC</version>
</dependency>

注:如果你使用的是 SpringBoot 3.x,只需要将 sa-token-spring-boot-starter 修改为 sa-token-spring-boot3-starter 即可。

3、设置配置文件

        你可以零配置启动项目 ,但同时你也可以在 application.yml 中增加如下配置,定制性使用框架:框架配置 (sa-token.cc)

server:# 端口port: 8081############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
sa-token:# token 名称(同时也是 cookie 名称)token-name: satoken# token 有效期(单位:秒) 默认30天,-1 代表永久有效timeout: 2592000# token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结active-timeout: -1# 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)is-concurrent: true# 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)is-share: true# token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)token-style: uuid# 是否输出操作日志is-log: true

4、创建启动类

import cn.dev33.satoken.SaManager;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SaTokenDemoApplication {public static void main(String[] args) throws JsonProcessingException {SpringApplication.run(SaTokenDemoApplication.class, args);System.out.println("启动成功,Sa-Token 配置如下:" + SaManager.getConfig());}
}

5、创建Controller类

import cn.dev33.satoken.stp.StpUtil;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user/")
public class UserController {// 测试登录,浏览器访问: http://localhost:8081/user/doLogin?username=zhang&password=123456@RequestMapping("doLogin")public String doLogin(String username, String password) {// 此处仅作模拟示例,真实项目需要从数据库中查询数据进行比对if("zhang".equals(username) && "123456".equals(password)) {StpUtil.login(10001);return "登录成功";}return "登录失败";}// 查询登录状态,浏览器访问: http://localhost:8081/user/isLogin@RequestMapping("isLogin")public String isLogin() {return "当前会话是否登录:" + StpUtil.isLogin();}
}

6、运行测试 

三、基于SpingBoot基础操作

​Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。

1、登录认证 

( 单端登录、多端登录、同端互斥登录、七天内免登录 )

@SpringBootApplication
public class AppLogin {public static void main(String[] args) {SpringApplication.run(AppLogin.class,args);}
}

 启动类代码

package com.satoken.controller;import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;@RestController
@RequestMapping("/user/")
public class UserController {// 测试登录,浏览器访问: http://localhost:8081/user/doLogin?username=zhang&password=123456@RequestMapping("doLogin")public String doLogin(String username, String password) {// 此处仅作模拟示例,真实项目需要从数据库中查询数据进行比对if("zhang".equals(username) && "123456".equals(password)) {StpUtil.login(10001);return "登录成功";}return "登录失败";}// 查询登录状态,浏览器访问: http://localhost:8081/user/isLogin@RequestMapping("isLogin")public String isLogin() {return "当前会话是否登录:" + StpUtil.isLogin();}// 退出 http://localhost:8081/user/logout@GetMapping("/logout")public boolean logout(){StpUtil.logout();return true;}检验当前会话是否已经登录, 如果未登录,则抛出异常:`NotLoginException`// http://localhost:8081/user/checkLogin@GetMapping("/checkLogin")public SaResult checkLogin(){try{StpUtil.checkLogin();return SaResult.ok("已经登录");}catch (NotLoginException e){e.printStackTrace();return SaResult.error("未登录");}}// 获取登录ID http://localhost:8081/user/getLoginId@GetMapping("/getLoginId")public Map<String,Object> getLoginId(){Map<String,Object> map = new HashMap<>();// 获取当前会话账号id, 如果未登录,则抛出异常:`NotLoginException`map.put("getLoginId",StpUtil.getLoginId());map.put("getLoginIdAsInt",StpUtil.getLoginIdAsInt());// 获取当前会话账号id, 并转化为`String`类型return map;}// token信息 http://localhost:8081/user/getToken@GetMapping("/getToken")public SaTokenInfo getToken(){return StpUtil.getTokenInfo();}}

测试:

2、权限认证 

        所谓权限认证,核心逻辑就是判断一个账号是否拥有指定权限:有,就让你通过。没有?那禁止访问!深入到底层数据中就是每个账号都会拥有一组权限码集合,框架来校验这个集合中是否包含指定的权限码。

        例如:当前账号拥有权限码集合 ["user-add", "user-delete", "user-get"],这时候我来校验权限 "user-update",则其结果就是:验证失败,禁止访问

        所以现在问题的核心就是两个:如何获取一个账号所拥有的权限码集合?本次操作需要验证的权限码是哪个?

        因为每个项目的需求不同,其权限设计也千变万化,因此 [ 获取当前账号权限码集合 ] 这一操作不可能内置到框架中, 所以 Sa-Token 将此操作以接口的方式暴露给你,方便你根据自己的业务逻辑进行重写。你需要做的就是新建一个类,实现 StpInterface接口,例如以下代码:

package com.satoken.service;import cn.dev33.satoken.stp.StpInterface;
import org.springframework.stereotype.Component;import java.util.ArrayList;
import java.util.List;/*** 自定义权限加载接口实现类*/
@Component    // 保证此类被 SpringBoot 扫描,完成 Sa-Token 的自定义权限验证扩展
public class StpInterfaceImpl implements StpInterface {/*** 返回一个账号所拥有的权限码集合*/@Overridepublic List<String> getPermissionList(Object loginId, String loginType) {// 本 list 仅做模拟,实际项目中要根据具体业务逻辑来查询权限List<String> list = new ArrayList<String>();list.add("101");list.add("user.add");list.add("user.update");list.add("user.get");// list.add("user.delete");list.add("art.*");return list;}/*** 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验)*/@Overridepublic List<String> getRoleList(Object loginId, String loginType) {// 本 list 仅做模拟,实际项目中要根据具体业务逻辑来查询角色List<String> list = new ArrayList<>();list.add("admin");list.add("super-admin");return list;}
}

然后在controller层

import cn.dev33.satoken.stp.StpUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;@RestController
@RequestMapping("/auth")
public class AuthenticationController {// 获取所有权限 http://localhost:8081/auth/getPermissionList@GetMapping("/getPermissionList")public List<String> getPermissionList(){return StpUtil.getPermissionList();}// 权限判断 http://localhost:8081/auth/hasPermission@GetMapping("/hasPermission")public boolean hasPermission(){// 判断:当前账号是否含有指定权限, 返回 true 或 falsereturn StpUtil.hasPermission("user.add");}// 权限检查 http://localhost:8081/auth/checkPermission@GetMapping("/checkPermission")public boolean checkPermission(){// 校验:当前账号是否含有指定权限, 如果验证未通过,则抛出异常: NotPermissionExceptionStpUtil.checkPermission("user.xadd");return true;}// 权限检查 http://localhost:8081/auth/checkPermissionAnd@GetMapping("/checkPermissionAnd")public boolean checkPermissionAnd(){// 校验:当前账号是否含有指定权限 [指定多个,必须全部验证通过]StpUtil.checkPermissionAnd("user.add", "user.add", "art.get");return true;}// http://localhost:8081/auth/getRoleList@GetMapping("/getRoleList")public List<String> getRoleList(){// 获取:当前账号所拥有的角色集合return StpUtil.getRoleList();}// http://localhost:8081/auth/hasRole?role=@GetMapping("/hasRole")public boolean hasRole(String role){return StpUtil.hasRole(role);}// http://localhost:8081/auth/checkRole?role=@GetMapping("/checkRole")public boolean checkRole(String role){StpUtil.checkRole(role);return true;}
}

获取所有权限(前提是要先登录,相当先要建立session 会话) 

 权限判断(后面的接口同理)

拦截全局异常:

        鉴权失败,抛出异常,要把异常显示给用户看吗?当然不可以!你可以创建一个全局异常拦截器,统一返回给前端的格式,参考:

@RestControllerAdvice
public class GlobalExceptionHandler {// 全局异常拦截 @ExceptionHandlerpublic SaResult handlerException(Exception e) {e.printStackTrace(); return SaResult.error(e.getMessage());}
}

 

 

如何将权限精确到按钮级(权限范围可以控制到页面上的每一个按钮是否显示

思路:如此精确的范围控制只依赖后端已经难以完成,此时需要前端进行一定的逻辑判断。

如果是前后端一体项目,可以参考:Thymeleaf 标签方言,如果是前后端分离项目,则:

  1. 在登录时,把当前账号拥有的所有权限码一次性返回给前端。
  2. 前端将权限码集合保存在localStorage或其它全局状态管理对象中。
  3. 在需要权限控制的按钮上,使用 js 进行逻辑判断,例如在Vue框架中我们可以使用如下写法:
<button v-if="arr.indexOf('user.delete') > -1">删除按钮</button>

        注意:以上写法只为提供一个参考示例,不同框架有不同写法,大家可根据项目技术栈灵活封装进行调用。

3、踢人下线

所谓踢人下线,核心操作就是找到指定 loginId 对应的 Token,并设置其失效。

强制注销:

StpUtil.logout(10001);                    // 强制指定账号注销下线 
StpUtil.logout(10001, "PC");              // 强制指定账号指定端注销下线 
StpUtil.logoutByTokenValue("token");      // 强制指定 Token 注销下线 

踢人下线:

StpUtil.kickout(10001);                    // 将指定账号踢下线 
StpUtil.kickout(10001, "PC");              // 将指定账号指定端踢下线
StpUtil.kickoutByTokenValue("token");      // 将指定 Token 踢下线

 登录之后,根据 id 踢人下线

 

4、注解鉴权

        尽管使用代码鉴权非常方便,但是我仍希望把鉴权逻辑和业务逻辑分离开来,我可以使用注解鉴权吗?当然可以!注解鉴权 —— 优雅的将鉴权与业务代码分离!但是注解鉴权也相对而言,不方便改变,没有代码鉴权那样可以动态鉴权。

  • @SaCheckLogin: 登录校验 —— 只有登录之后才能进入该方法。
  • @SaCheckRole("admin"): 角色校验 —— 必须具有指定角色标识才能进入该方法。
  • @SaCheckPermission("user:add"): 权限校验 —— 必须具有指定权限才能进入该方法。
  • @SaCheckSafe: 二级认证校验 —— 必须二级认证之后才能进入该方法。
  • @SaCheckBasic: HttpBasic校验 —— 只有通过 Basic 认证后才能进入该方法。
  • @SaIgnore:忽略校验 —— 表示被修饰的方法或类无需进行注解鉴权和路由拦截器鉴权。
  • @SaCheckDisable("comment"):账号服务封禁校验 —— 校验当前账号指定服务是否被封禁。

        Sa-Token 使用全局拦截器完成注解鉴权功能,为了不为项目带来不必要的性能负担,拦截器默认处于关闭状态。因此,为了使用注解鉴权,你必须手动将 Sa-Token 的全局拦截器注册到你项目中:(以SpringBoot2.0为例,新建配置类SaTokenConfigure.java

import cn.dev33.satoken.interceptor.SaInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {// 注册 Sa-Token 拦截器,打开注解式鉴权功能@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 注册 Sa-Token 拦截器,打开注解式鉴权功能registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**");}
}

controller层:

import cn.dev33.satoken.annotation.*;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/auth")
public class AuthenticationController {// 登录校验:只有登录之后才能进入该方法// http://localhost:8081/auth/info@SaCheckLogin@RequestMapping("info")public String info() {return "查询用户信息";}// 角色校验:必须具有指定角色才能进入该方法// http://localhost:8081/auth/check_role@SaCheckRole("super-xadmin")@RequestMapping("check_role")public String check_role() {return "用户增加";}// 权限校验:必须具有指定权限才能进入该方法@SaCheckPermission("user-add")@RequestMapping("check_permission")public String check_permission() {return "用户增加";}// 校验当前账号是否被封禁 comment 服务,如果已被封禁会抛出异常,无法进入方法@SaCheckDisable("comment")@RequestMapping("send")public String send() {return "查询用户信息";}// 注解式鉴权:只要具有其中一个权限即可通过校验@RequestMapping("atJurOr")@SaCheckPermission(value = {"user-add", "user-all", "user-delete"}, mode = SaMode.OR)public SaResult atJurOr() {return SaResult.data("用户信息");}// 角色权限双重 “or校验”:具备指定权限或者指定角色即可通过校验@RequestMapping("userAdd")@SaCheckPermission(value = "user.add", orRole = "admin")public SaResult userAdd() {return SaResult.data("用户信息");}// 此接口加上了 @SaIgnore 可以游客访问@SaIgnore@RequestMapping("getList")public SaResult getList() {// ...return SaResult.ok();}// 在 `@SaCheckOr` 中可以指定多个注解,只要当前会话满足其中一个注解即可通过验证,进入方法。@SaCheckOr(login = @SaCheckLogin,role = @SaCheckRole("admin"),permission = @SaCheckPermission("user.add"))@RequestMapping("test")public SaResult test() {// ...return SaResult.ok();}}

        在 注解式鉴权 实现了注解鉴权, 但是默认的拦截器模式却有一个缺点,那就是无法在Controller层以外的代码使用进行校验。因此Sa-Token提供AOP插件,你只需在pom.xml里添加如下依赖,便可以在任意层级使用注解鉴权。

<!-- Sa-Token 整合 SpringAOP 实现注解鉴权 -->
<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-aop</artifactId><version>1.35.0.RC</version>
</dependency>

  • 拦截器模式,只能把注解写在Controller层,AOP模式,可以将注解写在任意层级
  • 拦截器和AOP模式不可同时集成,否则会在Controller层发生一个注解校验两次的bug

相关文章:

SpingBoot整合Sa-Token框架(1)

一、文档参考&#xff1a;框架介绍 (sa-token.cc) 框架生态——开源项目 (sa-token.cc) 二、与SpingBoot整合 1、创建项目 在 IDE 中新建一个 SpringBoot 项目&#xff0c;例如&#xff1a;sa-token-demo-springboot&#xff08;不会的同学请自行百度或者参考&#xff1a;Sp…...

软件测试技术题目大全【含答案】

请看下面 你的测试职业发展是什么?  测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&#x…...

C#__线程的优先级和状态控制

线程的优先级&#xff1a; 一个CPU同一时刻只能做一件事情&#xff0c;哪个线程优先级高哪个先运行&#xff0c;优先级相同看调度算法。 在Thread类中的Priority属性&#xff08;Highest,Above,Normal,BelowNormal,Lowest&#xff09;可以影响线程的优先级 关于…...

103.36.167.X在服务器删除、复制文件的时候会出现卡的情况,是什么原因?

服务器硬盘在删除文件或复制文件时出现卡顿情况可能有多种原因。以下是一些常见的问题和解决方法&#xff1a; 硬盘性能低下&#xff1a;如果服务器硬盘的读写速度较慢&#xff0c;可能会导致卡顿现象。解决方法可以是升级到更高性能的硬盘或者使用RAID技术提升硬盘读写速度。 …...

Vim 插件应用篇 vim-plug:简洁高效的Vim插件管理工具

用插件管理插件 Vim-plug介绍 Vim-plug 是一个Vim插件管理器&#xff0c;利用异步并行可以快速地安装、更新和卸载插件。它的安装和配置都非常简单&#xff0c;而且在操作过程中会给出很多易读的反馈信息&#xff0c;是一个自由、开源、速度非常快的、并行地安装或更新插件&a…...

springboot 请求https的私有证书验证

一、方案描述 我这里采用RestTemplate的方式调用https请求&#xff0c;请求第三方接口获取数据&#xff0c;证书由第三方私自签发的证书&#xff0c;我们构建的是一个springboot的API项目。 1.pom文件引入jar <dependencies><dependency><groupId>org.spr…...

YOLO的基本原理详解

YOLO介绍 YOLO是一种新的目标检测方法。以前的目标检测方法通过重新利用分类器来执行检测。与先前的方案不同&#xff0c;将目标检测看作回归问题从空间上定位边界框&#xff08;bounding box&#xff09;并预测该框的类别概率。使用单个神经网络&#xff0c;在一次评估中直接…...

【UE 材质】制作飘动的旗帜

效果 步骤 1. 首先在建模软件中创建一个平面&#xff0c;注意分段数一定要多 2. 在UE中创建一个材质&#xff0c;这里命名为“Mat_Flag” 打开“Mat_Flag”&#xff0c;先将旗帜纹理连接到基础颜色 先选中导入的模型然后点击根据选中的模型预览材质 创建如下节点可以看到此时模…...

windows苹果商店上架ipa(基于appuploader)

参考文章&#xff1a; 上传ipa到appstore详细步骤 1、苹果商店地址&#xff1a;https://appstoreconnect.apple.com/apps 2、创建我的app 使用hbuilderx或apicloud云打包后&#xff0c;会生成一个ipa文件&#xff0c;而iphone是无法直接安装这个ipa文件的&#xff0c;需要将这…...

什么是SpringCloud Eureka服务注册与发现

&#x1f600;前言 本篇博文是关于SpringCloud Eureka 介绍&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&…...

A Mathematical Framework for Transformer Circuits—Part (1)

A Mathematical Framework for Transformer Circuits 前言Summary of ResultsREVERSE ENGINEERING RESULTSCONCEPTUAL TAKE-AWAYS Transformer OverviewModel SimplificationsHigh-Level ArchitectureVirtual Weights and the Residual Stream as a Communication ChannelVIRTU…...

关于Maven中使用idea发布java项目的步骤:

1.新建Maven模块&#xff1a;...

如何使用ArcGIS Earth制作地图动画视频

通常情况下&#xff0c;我们所看到的地图都是静态展示&#xff0c;对于信息的传递&#xff0c;视频比图片肯定会更加丰富&#xff0c;所以制作地图动画视频更加有利于信息的传递&#xff0c;这里我们讲解一下ArcGIS Earth 2.0如何制作地图动画视频&#xff0c;希望能对你有所帮…...

【Linux成长史】Linux基本指令大全

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 数据库专栏 初阶数据结构 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如…...

ChatGPT:深度学习和机器学习的知识桥梁

目录 ChatGPT简介 ChatGPT的特点 ChatGPT的应用领域 ChatGPT的工作原理 与ChatGPT的交互 ChatGPT的优势 ChatGPT在机器学习中的应用 ChatGPT在深度学习中的应用 总结 近年来&#xff0c;随着深度学习技术的不断发展&#xff0c;自然语言处理技术也取得了显著的进步。其…...

python-基本数据类型-笔记

数字型digit&#xff1a;int整型 float浮点型 complex复数 布尔型bool&#xff1a;True False 字符串str&#xff1a;用一对引号&#xff08;单、双、三单、三双等引号&#xff09;作为定界线 列表list&#xff1a;[ ] 元组tuple&#xff1a;( ) 字典dict&#xff1a;{ } 由键值…...

如何使用API数据接口给自己创造收益

使用API数据接口创造收益的方法有很多&#xff0c;以下是一些常见的方法&#xff0c;并附有代码示例&#xff1a; 一、数据分析与预测 通过获取API数据接口中的大量数据&#xff0c;我们可以进行深入的数据分析&#xff0c;并利用这些数据来预测未来的趋势和行为。例如&#…...

第三方软件信息安全测评服务范围

安全测试 第三方软件信息安全cnas资质测评服务范围&#xff1a; 1、信息安全风险评估 依据《GB/T 20984-2007 信息安全技术信息安全风险评估规范》&#xff0c;通过风险评估项目的实施&#xff0c;对信息系统的重要资产、资产所面临的威胁、资产存在的脆弱性、已采取的防护措…...

测试开发 | Java 接口自动化测试首选方案:REST Assured 实践

1 . 初识 REST Assured 在 REST Assured 的官方 GitHub 上有这样一句简短的描述&#xff1a; Java DSL for easy testing of REST services 简约的 REST 服务测试 Java DSL 1.1 优点&#xff1a; REST Assured 官方的 README 第一句话对进行了一个优点的概述&#xff0c;总的…...

vue3:13、Vue3.3新特性-defineModel

旧版本的语法 新版本语法...

如何理解C++中的void*

1.什么是void* 首先void*中的void代表一个任意的数据类型&#xff0c;"星号"代表一个指针&#xff0c;所以其就是一个任意数据类型的指针。 其实就是一个未指定跳跃力的指针。 那void*的跳跃力又什么时候指定&#xff1f;在需要使用的时候指定就可以了&#xff0c…...

MVC,MVP,MVVM的理解和区别

MVC MVC &#xff0c;早期的开发架构&#xff0c;在安卓里&#xff0c;用res代表V&#xff0c;activity代表Controller层&#xff0c;Model层完成数据请求&#xff0c;更新操作&#xff0c;activity完成view的绑定&#xff0c;以及业务逻辑的编写&#xff0c;更新view&#xf…...

【TypeScript】一直提示 :无法重新声明块范围变量

【TypeScript】一直提示 &#xff1a;无法重新声明块范围变量 问题描述&#xff1a;在VSCode中编写ts代码时&#xff0c;编写保存完之后&#xff0c;通过tsc 文件名.ts编译就会看到变量名下面出现了红色的波浪线&#xff0c;提示的内容是无法重新声明块范围变量。 解决方法&am…...

【python自动化】七月PytestAutoApi开源框架学习笔记(一)

前言 本篇内容为学习七月大佬开源框架PytestAutoApi记录的相关知识点&#xff0c;供大家学习探讨 项目地址&#xff1a;https://gitee.com/yu_xiao_qi/pytest-auto-api2 阅读本文前&#xff0c;请先对该框架有一个整体学习&#xff0c;请认真阅读作者的README.md文件。 本文…...

Python学习 -- logging模块

logging 模块是 Python 中用于记录日志的标准库&#xff0c;它提供了丰富的功能&#xff0c;可以帮助开发者进行日志记录和管理。以下是关于logging模块的详细使用方式&#xff0c;包括日志级别、处理流程、Logger 类、Handler 类、Filter 类、Formatter 类以及模块中常用函数等…...

【socket】getaddrinfo、getsockname、getpeername对比

这三个函数都是在网络编程中用来获取地址信息的&#xff0c;但是它们的使用场景和功能有所不同。getaddrinfo(): 这个函数主要用于将一个主机名&#xff08;或者 IP 地址&#xff09;和端口号转换成适用于 socket() 函数的一个或多个套接字地址结构。它能够处理 IPv4 和 IPv6 地…...

【MySQL】表的增删改查(进阶)

表的增删改查&#xff08;进阶&#xff09; 一. 数据库约束1. 约束类型2. NULL约束3. UNIQUE&#xff1a;唯一约束4. DEFAULT&#xff1a;默认值约束5. PRIMARY KEY&#xff1a;主键约束6. FOREIGN KEY&#xff1a;外键约束7. CHECK约束 二. 表的设计1. 一对一2. 一对多3. 多对…...

关于安卓13中Android/data目录下的文件夹只能查看无法进行删改的问题

前言 因为升级了安卓13&#xff0c;然后有个app需要恢复数据&#xff0c;打算和以前一样直接删除Android/data下对应目录再添加&#xff0c;结果不行&#xff0c;以下是结合网上以及自己手机情况来做的一种解决方案。 解决 准备&#xff1a; 待恢复app&#xff08;包名com.…...

Vulnhub: Masashi: 1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.236 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.236查看80端口的robots.txt提示三个文件 snmpwalk.txt内容&#xff0c;tftp服务在1337端口 sshfolder.txt内容&#xff0c…...

校园二手物品交易系统微信小程序设计

系统简介 本网最大的特点就功能全面&#xff0c;结构简单&#xff0c;角色功能明确。其不同角色实现以下基本功能。 服务端 后台首页&#xff1a;可以直接跳转到后台首页。 用户信息管理&#xff1a;管理所有申请通过的用户。 商品信息管理&#xff1a;管理校园二手物品中…...