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

同城分类信息网站微信腾讯会议

同城分类信息网站,微信腾讯会议,网站漂浮广告代码,做网站的怎么认证微博文章目录 前言 一、StpUtil 二、SaSession 三、SaTokenDao 四、SaStategy 五、SaManager 六、SaHolder 七、SaRouter 八、SaFoxUtil 九、SaTokenConfigFactory 十、SpringMVCUtil 十一、SaReactorHolder&SaReactorSyncHolder 前言 前面我们一家讲解了Sa-Token…

文章目录

前言

一、StpUtil

二、SaSession

三、SaTokenDao

四、SaStategy

五、SaManager

六、SaHolder

七、SaRouter

八、SaFoxUtil

九、SaTokenConfigFactory

十、SpringMVCUtil

十一、SaReactorHolder&SaReactorSyncHolder


前言

前面我们一家讲解了Sa-Token的一些源码分析,这一期我们来看看Sa-Token常见的一些类,干什

么的以及这些类有什么作用。

一、StpUtil

StpUtil:权限认证工具类,是我们最最最常用的一个工具类,他位于sa-token-core模块中的

cn.dev33.satoken.stp包中,他里面所有的方法都是静态的,主要调用StpLoginc里面的方法,你可

以理解StpUtil接收请求,逻辑都在StpLogic中,里面有大量工具方法,不仅可以用来login,还可

以鉴权【角色字符串和权限字符串】、注销、踢人下线、查询当前会话、获取会话对象

SaSession、获取token相关信息、id反查token、封禁账号、模拟任意身份、二级认证。总而言

之,该工具类几乎和sa-token框架的每个地方都能触发一点关系,可视为枢纽。

/*** Sa-Token 权限认证工具类** @author click33* @since 1.0.0*/
public class StpUtil {private StpUtil() {}/*** 多账号体系下的类型标识*/public static final String TYPE = "login";/*** 底层使用的 StpLogic 对象*/public static StpLogic stpLogic = new StpLogic(TYPE);/*** 获取当前 StpLogic 的账号类型** @return /*/public static String getLoginType(){return stpLogic.getLoginType();}/*** 安全的重置 StpLogic 对象** <br> 1、更改此账户的 StpLogic 对象 * <br> 2、put 到全局 StpLogic 集合中 * <br> 3、发送日志 * * @param newStpLogic / */public static void setStpLogic(StpLogic newStpLogic) {// 1、重置此账户的 StpLogic 对象stpLogic = newStpLogic;// 2、添加到全局 StpLogic 集合中//    以便可以通过 SaManager.getStpLogic(type) 的方式来全局获取到这个 StpLogicSaManager.putStpLogic(newStpLogic);// 3、$$ 发布事件:更新了 stpLogic 对象SaTokenEventCenter.doSetStpLogic(stpLogic);}
.................省略

二、SaSession

SaSession:会话对象,你理解为我跟你的会话,你可以在会话中存一些数据或者取一些数据,专

业数据缓存组件,可以set、get各种键值。

在Sa-Token中,SaSession分为三种,分别是:

Account-Session:指的是框架为每个账号分配的Session。

Token-Session:指的是框架为每个token分配的SaSession。

- Custom-Session:指的是以一个特定的值作为SessionId,来分配Session。

注意:以上分类仅为框架设计层面的概念区分,实际他们的数据存储格式都是一致的。

type来区分不同类型的SaSession。

<!-- Sa-Token 整合 RedisTemplate -->
<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-redis-template</artifactId><version>1.41.0</version>
</dependency><!-- 提供 Redis 连接池 -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>

三、SaTokenDao

SaSession作为会话对象,而SaTokenDao则是作为数据持久层接口,负责所有会话数据底层的读

写,SaTokenDao接口有个默认的实现SaTokenDaoDefaultImpl,如果只引入sa-token依赖,用的

就是这个默认实现,默认将会话的数据存储在内存当中,用的是ConcurrentHashMap存储会话数

据,但是我们在开发中都不会将会话数据存储在内存当中,因为重启后数据就会丢失,一般都会存

储在Redis、MySQL当中,Sa-Token也提供了集成Redis依赖,只需要引入依赖,那么会话的数据

就可以存储在Redis当中。

<!-- Sa-Token 整合 RedisTemplate -->
<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-redis-template</artifactId><version>1.41.0</version>
</dependency><!-- 提供 Redis 连接池 -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>

四、SaStategy

SaStategy-全局策略,该类写一些全局策略,如创建Token的策略、创建Session的策略等。所有

策略可自定义。

/*** 创建 Token 的策略 * <p> 参数 [账号id, 账号类型] */
public BiFunction<Object, String, String> createToken = (loginId, loginType) -> {// 默认,还是uuid return "xxxxx-xxxxx-xxxxx-xxxxx";
};/*** 创建 Session 的策略 * <p> 参数 [SessionId] */
public Function<String, SaSession> createSession = (sessionId) -> {return new SaSession(sessionId);
};/*** 判断:集合中是否包含指定元素(模糊匹配) * <p> 参数 [集合, 元素] */
public BiFunction<List<String>, String, Boolean> hasElement = (list, element) -> {return false;
};/*** 对一个 [Method] 对象进行注解校验 (注解鉴权内部实现) * <p> 参数 [Method句柄] */
public Consumer<Method> checkMethodAnnotation = (method) -> {// ... 
};/*** 对一个 [元素] 对象进行注解校验 (注解鉴权内部实现) * <p> 参数 [element元素] */
public Consumer<AnnotatedElement> checkElementAnnotation = (target) -> {// ... 
};/*** 从元素上获取注解(注解鉴权内部实现) * <p> 参数 [element元素,要获取的注解类型] */
public BiFunction<AnnotatedElement, Class<? extends Annotation> , Annotation> getAnnotation = (element, annotationClass)->{// 默认使用jdk的注解处理器 return element.getAnnotation(annotationClass);
};/*** 拼接两个url * <p> 例如:url1=http://domain.cn,url2=/sso/auth,则返回:http://domain.cn/sso/auth* <p> 参数 [第一个url, 第二个url] */
public BiFunction<String, String, String> spliceTwoUrl = (url1, url2) -> {return xxx;
};/*** 是否自动续期,每次续期前都会执行,可以加入动态判断逻辑* <p> 参数 当前 stpLogic 实例对象* <p> 返回 true 自动续期 false 不自动续期*/
public Function<StpLogic, Boolean> autoRenew = (stpLogic) -> {return stpLogic.getConfigOrGlobal().getAutoRenew();
};

五、SaManager

SaManger是负责所有全局组件,管理所有Sa-Token的全局组件,通过这个类可以快速获取、写入

各种全局对象。

SaManager.getConfig();                 // 获取全局配置对象 
SaManager.getSaTokenDao();             // 获取数据持久化对象 
SaManager.getStpInterface();           // 获取权限认证对象 
SaManager.getSaTokenContext();         // 获取一级Context处理对象
SaManager.getSaTokenSecondContext();   // 获取二级Context处理对象
SaManager.getSaTokenContextOrSecond(); // 获取一个可用的 Context 处理对象
SaManager.getSaTokenListener();        // 获取侦听器对象 
SaManager.getSaTemp();                 // 获取临时令牌认证模块对象 
SaManager.getSaJsonTemplate();         // 获取 JSON 转换器 Bean
SaManager.getSaSignTemplate();         // 获取参数签名 Bean 
SaManager.getStpLogic("type");         // 获取指定账号类型的StpLogic对象,获取不到时自动创建并返回 
SaManager.getStpLogic("type", false);  // 获取指定账号类型的StpLogic对象,获取不到时抛出异常 
SaManager.putStpLogic(stpLogic);       // 向全局集合中 put 一个 StpLogic 

挑选下面四个方法重点说明:

SaManger.getConfig()                     //获取全局配置对象

SaManger.getSaTokenDao()           //获取数据持久化对象

SaManger.getStpInterface()            //获取权限认证对象

SaManger.getSaTokenListener()    //获取侦听器对象

六、SaHolder

Sa-Token上下文持有类,你可以通过此类快速获取当前环境下的SaRequest、SaResponse、

SaStorage、SaApplication对象。

SaHolder.getContext();           // 获取当前请求的 SaTokenContext
SaHolder.getRequest();           // 获取当前请求的 [Request] 对象 
SaHolder.getResponse();          // 获取当前请求的 [Response] 对象 
SaHolder.getStorage();           // 获取当前请求的 [Storage] 对象
SaHolder.getApplication();       // 获取全局 SaApplication 对象

七、SaRouter

路由匹配工具类。鉴权的时候会用到,提供一系列的路由匹配方法,一般在全局拦截器、过滤器做

路由拦截鉴权。

@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 注册 Sa-Token 拦截器,定义详细认证规则 registry.addInterceptor(new SaInterceptor(handler -> {// 指定一条 match 规则SaRouter.match("/**")    // 拦截的 path 列表,可以写多个 */.notMatch("/user/doLogin")        // 排除掉的 path 列表,可以写多个 .check(r -> StpUtil.checkLogin());        // 要执行的校验动作,可以写完整的 lambda 表达式// 根据路由划分模块,不同模块不同鉴权 SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));SaRouter.match("/comment/**", r -> StpUtil.checkPermission("comment"));})).addPathPatterns("/**");}
}

八、SaFoxUtil

Sa-Token内部工具类,包含一些工具方法:

SaFoxUtil.printSaToken();           // 打印 Sa-Token 版本字符画
SaFoxUtil.getRandomString(8);       // 生成指定长度的随机字符串
SaFoxUtil.isEmpty(str);             // 指定字符串是否为null或者空字符串
SaFoxUtil.isNotEmpty(str);          // 指定字符串是否不是null或者空字符串
SaFoxUtil.equals(a, b);             // 比较两个对象是否相等 
SaFoxUtil.getMarking28();           // 以当前时间戳和随机int数字拼接一个随机字符串
SaFoxUtil.formatDate(date);         // 将日期格式化为yyyy-MM-dd HH:mm:ss字符串
SaFoxUtil.searchList(dataList, prefix, keyword, start, size, sortType);             // 从集合里查询数据
SaFoxUtil.searchList(dataList, start, size, sortType);       // 从集合里查询数据
SaFoxUtil.vagueMatch(patt, str);    // 字符串模糊匹配
SaFoxUtil.getValueByType(obj, cs);    // 将指定值转化为指定类型
SaFoxUtil.joinParam(url, parameStr);    // 在url上拼接上kv参数并返回 
SaFoxUtil.joinParam(url, key, value);    // 在url上拼接上kv参数并返回 
SaFoxUtil.joinSharpParam(url, parameStr);    // 在url上拼接锚参数 
SaFoxUtil.joinSharpParam(url, key, value);    // 在url上拼接锚参数 
SaFoxUtil.arrayJoin(arr);    // 将数组的所有元素使用逗号拼接在一起
SaFoxUtil.isUrl(str);    // 使用正则表达式判断一个字符串是否为URL
SaFoxUtil.encodeUrl(str);    // URL编码 
SaFoxUtil.decoderUrl(str);    // URL解码 
SaFoxUtil.convertStringToList(str);    // 将指定字符串按照逗号分隔符转化为字符串集合 
SaFoxUtil.convertListToString(list);    // 将指定集合按照逗号连接成一个字符串 
SaFoxUtil.convertStringToArray(str);    // String 转 Array,按照逗号切割 
SaFoxUtil.convertArrayToString(arr);    // Array 转 String,按照逗号切割 
SaFoxUtil.emptyList();    // 返回一个空集合
SaFoxUtil.toList(... strs);    // String 数组转集合 

九、SaTokenConfigFactory

配置对象工厂类,用于手动读取配置文件初始化SaTokenConfig对象,只有在非IOC环境下你才会

用到此类,在SpringBoot中会已经将SaTokenConfig注入到我们IOC环境中,首先他会去拿

SaTokenConfig,如果拿不到才去走这个类创建SaTokenConfig。

十、SpringMVCUtil

SpringMVC操作的工具类,位于包:sa-token-spring-boot-starter,我们一般很难用到该工具

类,几乎是框架在自己用。

SpringMVCUtil.getRequest();           // 获取本次请求的 request 对象 
SpringMVCUtil.getResponse();          // 获取本次请求的 response 对象 
SpringMVCUtil.isWeb();                // 判断当前是否处于 Web 上下文中  

十一、SaReactorHolder&SaReactorSyncHolder

Sa-Token集成Reactor时的 ServerWebExchange 工具类,位于包:sa-token-reactor-spring-boot-

starter,在最新流行的Web-Flux中用到的一种模式Reactor,当你用到Web-Flux,那你可能需要关

注一下。

// 异步方式获取 ServerWebExchange 对象 
SaReactorHolder.getContext().map(e -> {System.out.println(e);
});// 同步方式获取 ServerWebExchange 对象 
ServerWebExchange e = SaReactorSyncHolder.getContext();
System.out.println(e);
http://www.dtcms.com/wzjs/355126.html

相关文章:

  • 宝安大型商城网站建设seo公司后付费
  • 怎么免费做网站教程app开发费用标准
  • 长春网站制作软件搜索引擎调词平台哪个好
  • 江阴市住房和城乡建设局网站seo入门到精通
  • 带屏蔽的网站做水晶头南京网站制作公司
  • 做标识的网站 知乎如何做外贸网站的推广
  • 用web制作网站三亚百度推广公司电话
  • 域名注册了如何做网站logo网站设计
  • 做素材网站存储青岛网站建设微动力
  • 广州专业网站建设有哪些河北网站推广
  • 网址大全12306八宿县网站seo优化排名
  • 热门网站有哪些谷歌网站网址
  • 包装材料营销型网站企业网站设计思路
  • 怎样与其它网站做友情链接网络推广技术外包
  • 福州做网站的公司百度一下你就知道了官网
  • 做欧美贸易的主要有哪些网站2023年新闻小学生摘抄
  • 做短视频网站在线种子资源库
  • 做养生网站怎么样关键词列表
  • wordpress自带的文章图片怎么修改郑州seo线下培训
  • 网站结构规划免费网站统计
  • 好网站123必应搜索引擎网站
  • 人流什么时间做 新闻源网站专业外贸网络推广
  • 亚马逊网站可以做批发吗杭州网络推广
  • 英文网站建设比较好做神马seo快速排名软件
  • 怎么注册公司需要什么材料太原关键词优化报价
  • 做优化网站怎么优化代码高端建站
  • 坪地网站制作惠州百度seo地址
  • 做网站的软件帝国百度网页入口官网
  • 小程序微信开发文章优化关键词排名
  • 成都高新区网站建设百度站长工具网站