From c5d726952aabc069eed744a3acc1e31b0b0fd1cd Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Fri, 4 Jun 2021 23:07:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=96=B0=E5=A2=9E=E5=B8=B8?= =?UTF-8?q?=E7=94=A8=E7=B1=BB=E3=80=81=E6=96=B9=E6=B3=95=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/pj/SaTokenDemoApplication.java | 2 +- sa-token-doc/doc/_sidebar.md | 3 +- sa-token-doc/doc/more/common-action.md | 98 +++++++++++++++++++ sa-token-doc/doc/senior/dcs.md | 16 +++ 4 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 sa-token-doc/doc/more/common-action.md diff --git a/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/SaTokenDemoApplication.java b/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/SaTokenDemoApplication.java index a27eb00e..03529d66 100644 --- a/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/SaTokenDemoApplication.java +++ b/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/SaTokenDemoApplication.java @@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import cn.dev33.satoken.SaManager; /** - * sa-token整合SpringBoot 示例 + * Sa-Token整合SpringBoot 示例 * @author kong * */ diff --git a/sa-token-doc/doc/_sidebar.md b/sa-token-doc/doc/_sidebar.md index f2f7f373..f7370f8f 100644 --- a/sa-token-doc/doc/_sidebar.md +++ b/sa-token-doc/doc/_sidebar.md @@ -38,7 +38,8 @@ - [Quick-Login快速登录插件](/plugin/quick-login) - **其它** - - [常见问题](/more/common-questions) + - [常用类、方法](/more/common-action) + - [常见问题排查](/more/common-questions) - [更新日志](/more/update-log) - [友情链接](/more/link) - [推荐公众号](/more/tj-gzh) diff --git a/sa-token-doc/doc/more/common-action.md b/sa-token-doc/doc/more/common-action.md new file mode 100644 index 00000000..811e0283 --- /dev/null +++ b/sa-token-doc/doc/more/common-action.md @@ -0,0 +1,98 @@ +# 常用类、方法 +本篇介绍Sa-Token中一些常用的全局对象、类 + +--- + +### SaManager +SaManager 负责管理 Sa-Token 所有运行时对象 +``` java +SaManager.getConfig(); // 获取全局配置对象 +SaManager.getSaTokenDao(); // 获取数据持久化对象 +SaManager.getStpInterface(); // 获取权限认证对象 +SaManager.getSaTokenAction(); // 获取框架行为对象 +SaManager.getSaTokenContext(); // 获取上下文处理对象 +SaManager.getSaTokenListener(); // 获取侦听器对象 +SaManager.getStpLogic("key"); // 获取指定key的StpLogic对象 +``` + + +### SaHolder +Sa-Token上下文持有类,通过此类快速获取当前环境的相关对象 +``` java +SaHolder.getRequest(); // 获取当前请求的 [Request] 对象 +SaHolder.getResponse(); // 获取当前请求的 [Response] 对象 +SaHolder.getStorage(); // 获取当前请求的 [存储器] 对象 +``` + + +### SaRouter +路由匹配工具类,详细戳:[路由拦截式鉴权](/use/route-check) + + +### SaFoxUtil +Sa-Token内部工具类,包含一些工具方法 +``` java +SaFoxUtil.printSaToken(); // 打印 Sa-Token 版本字符画 +SaFoxUtil.getRandomString(8); // 生成指定长度的随机字符串 +SaFoxUtil.isEmpty(str); // 指定字符串是否为null或者空字符串 +SaFoxUtil.getMarking28(); // 以当前时间戳和随机int数字拼接一个随机字符串 +SaFoxUtil.formatDate(date); // 将日期格式化为yyyy-MM-dd HH:mm:ss字符串 +SaFoxUtil.searchList(); // 从集合里查询数据 +SaFoxUtil.vagueMatch(patt, str); // 字符串模糊匹配 +``` + +### SaTokenConfigFactory +配置对象工厂类,通过此类你可以方便的根据properties配置文件创建一个配置对象 + +1、首先在项目根目录,创建一个配置文件:`sa-token.properties` + +``` java +# token名称 (同时也是cookie名称) +tokenName=satoken +# token有效期,单位s 默认30天, -1代表永不过期 +timeout=2592000 +# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 +activityTimeout +# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) =-1 +allowConcurrentLogin=true +# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) +isShare=true +# token风格 +isLog=false +``` + +2、然后使用以下代码获取配置对象 +``` java +// 设置配置文件地址 +SaTokenConfigFactory.configPath = "sa-token.properties"; + +// 获取配置信息到 config 对象 +SaTokenConfig config = SaTokenConfigFactory.createConfig(); + +// 注入到 SaManager 中 +SaManager.setConfig(config); +``` + + +### SpringMVCUtil +SpringMVC操作的工具类,位于包:`sa-token-spring-boot-starter` +``` java +SpringMVCUtil.getRequest(); // 获取当前会话的 request +SpringMVCUtil.getResponse(); // 获取当前会话的 response +``` + + +### SaReactorHolder & SaReactorSyncHolder +Sa-Token集成Reactor时的 ServerWebExchange 工具类,位于包:`sa-token-reactor-spring-boot-starter` +``` java +// 异步方式获取 ServerWebExchange 对象 +SaReactorHolder.getContent().map(e -> { + System.out.println(e); +}); + +// 同步方式获取 ServerWebExchange 对象 +ServerWebExchange e = SaReactorSyncHolder.getContent(); +System.out.println(e); +``` + + diff --git a/sa-token-doc/doc/senior/dcs.md b/sa-token-doc/doc/senior/dcs.md index 46b8b2bc..d27ec41f 100644 --- a/sa-token-doc/doc/senior/dcs.md +++ b/sa-token-doc/doc/senior/dcs.md @@ -33,6 +33,22 @@ Sa-Token 在集群、分布式下的解决方案 +### 依赖引入说明 + +虽然在[开始]章节已经说明了依赖引入规则,但是交流群里不少小伙伴提出bug解决到最后发现都是因为依赖引入错误引起的,此处再次重点强调一下: +**在微服务架构中使用Sa-Token时,网关和内部服务要分开引入Sa-Token依赖(不要直接在顶级父pom中引入Sa-Token)** + +总体来讲,需要关注的依赖就是两个:`sa-token-spring-boot-starter` 和 `sa-token-reactor-spring-boot-starter`,至于怎么分辨我们需要引入哪个呢?这个要看你使用的基础框架 + +对于内部基础服务来讲,我们一般都是使用SpringBoot默认的web模块:SpringMVC,因为这个SpringMVC是基于Servlet模型的,在这里我们需要引入的是`sa-token-spring-boot-starter` + +对于网关服务,大体来讲分为两种: +- 一种是基于Servlet模型的,如:Zuul,我们需要引入的是:`sa-token-spring-boot-starter`,详细戳:[在SpringBoot环境集成](/start/example) +- 一种是基于Reactor模型的,如:SpringCloud Gateway、Soul 等等,我们需要引入的是:`sa-token-reactor-spring-boot-starter`,**并且注册全局过滤器!**,详细戳:[在WebFlux环境集成](/start/webflux-example) + +切不可直接在一个项目里同时引入这两个依赖,否则会造成项目无法启动 + +