diff --git a/README.md b/README.md
index 4d21b0efb..c8c811ad4 100644
--- a/README.md
+++ b/README.md
@@ -133,7 +133,7 @@ registry.addInterceptor(new SaInterceptor(handler -> {
- **独立Redis** —— 将权限缓存与业务缓存分离。
- **Quick快速登录认证** —— 为项目零代码注入一个登录页面。
- **标签方言** —— 提供 Thymeleaf 标签方言集成包,提供 beetl 集成示例。
-- **jwt集成** —— 提供三种模式的 jwt 集成方案,提供 token 扩展参数能力。
+- **JWT集成** —— 提供三种模式的 JWT 集成方案,提供 token 扩展参数能力。
- **RPC调用状态传递** —— 提供 dubbo、grpc 等集成包,在RPC调用时登录状态不丢失。
- **参数签名** —— 提供跨系统API调用签名校验模块,防参数篡改,防请求重放。
- **自动续签** —— 提供两种Token过期策略,灵活搭配使用,还可自动续签。
@@ -162,7 +162,7 @@ Sa-Token SSO 分为三种模式,解决同域、跨域、共享Redis、跨Redis
3. 如果既无法做到前端同域,也无法做到后端同Redis,可以走模式三,Http请求校验 ticket 获取会话。
4. 提供 NoSdk 模式示例,不使用 Sa-Token 的系统也可以对接。
5. 提供 sso-server 接口文档,不使用 java 语言的系统也可以对接。
-6. 提供前后端分离整合方案:无论是 sso-server 还是 sso-client 的前后端分离都可以整合。
+6. 提供前后端分离整合方案:支持 sso-server 与 sso-client 情况下的各种整合需求。
7. 提供安全校验:域名校验、ticket校验、参数签名校验,有效防 ticket 劫持,防请求重放等攻击。
8. 参数防丢:笔者曾试验多个SSO框架,均有参数丢失情况,比如登录前是:`http://a.com?id=1&name=2`,登录成功后就变成了:`http://a.com?id=1`,Sa-Token-SSO 内有专门算法保证了参数不丢失,登录成功后精准原路返回。
9. 提供用户数据同步/迁移方案的建议:开发前统一迁移、运行时实时数据同步、根据关联字段匹配、根据 center_id 字段匹配等。
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java
index 3dffa941c..cf6f06525 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java
+++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java
@@ -33,14 +33,15 @@
* @since 1.0.0
*/
public class StpUtil {
-
- private StpUtil() {}
-
+
+ private StpUtil() {
+ }
+
/**
* 多账号体系下的类型标识
*/
public static final String TYPE = "login";
-
+
/**
* 底层使用的 StpLogic 对象
*/
@@ -51,27 +52,30 @@ private StpUtil() {}
*
* @return /
*/
- public static String getLoginType(){
+ public static String getLoginType() {
return stpLogic.getLoginType();
}
/**
* 安全的重置 StpLogic 对象
*
- *
1、更改此账户的 StpLogic 对象
- *
2、put 到全局 StpLogic 集合中
- *
3、发送日志
+ *
+ * 1、更改此账户的 StpLogic 对象
+ *
+ * 2、put 到全局 StpLogic 集合中
+ *
+ * 3、发送日志
*
- * @param newStpLogic /
+ * @param newStpLogic /
*/
public static void setStpLogic(StpLogic newStpLogic) {
// 1、重置此账户的 StpLogic 对象
stpLogic = newStpLogic;
-
+
// 2、添加到全局 StpLogic 集合中
- // 以便可以通过 SaManager.getStpLogic(type) 的方式来全局获取到这个 StpLogic
+ // 以便可以通过 SaManager.getStpLogic(type) 的方式来全局获取到这个 StpLogic
SaManager.putStpLogic(newStpLogic);
-
+
// 3、$$ 发布事件:更新了 stpLogic 对象
SaTokenEventCenter.doSetStpLogic(stpLogic);
}
@@ -79,50 +83,50 @@ public static void setStpLogic(StpLogic newStpLogic) {
/**
* 获取 StpLogic 对象
*
- * @return /
+ * @return /
*/
public static StpLogic getStpLogic() {
return stpLogic;
}
-
-
+
// ------------------- 获取 token 相关 -------------------
/**
- * 返回 token 名称,此名称在以下地方体现:Cookie 保存 token 时的名称、提交 token 时参数的名称、存储 token 时的 key 前缀
+ * 返回 token 名称,此名称在以下地方体现:Cookie 保存 token 时的名称、提交 token 时参数的名称、存储 token 时的 key
+ * 前缀
*
* @return /
*/
public static String getTokenName() {
- return stpLogic.getTokenName();
- }
+ return stpLogic.getTokenName();
+ }
/**
* 在当前会话写入指定 token 值
*
* @param tokenValue token 值
*/
- public static void setTokenValue(String tokenValue){
+ public static void setTokenValue(String tokenValue) {
stpLogic.setTokenValue(tokenValue);
}
/**
* 在当前会话写入指定 token 值
*
- * @param tokenValue token 值
+ * @param tokenValue token 值
* @param cookieTimeout Cookie存活时间(秒)
*/
- public static void setTokenValue(String tokenValue, int cookieTimeout){
+ public static void setTokenValue(String tokenValue, int cookieTimeout) {
stpLogic.setTokenValue(tokenValue, cookieTimeout);
}
/**
* 在当前会话写入指定 token 值
*
- * @param tokenValue token 值
+ * @param tokenValue token 值
* @param loginParameter 登录参数
*/
- public static void setTokenValue(String tokenValue, SaLoginParameter loginParameter){
+ public static void setTokenValue(String tokenValue, SaLoginParameter loginParameter) {
stpLogic.setTokenValue(tokenValue, loginParameter);
}
@@ -131,7 +135,7 @@ public static void setTokenValue(String tokenValue, SaLoginParameter loginParame
*
* @param tokenValue 要保存的 token 值
*/
- public static void setTokenValueToStorage(String tokenValue){
+ public static void setTokenValueToStorage(String tokenValue) {
stpLogic.setTokenValueToStorage(tokenValue);
}
@@ -147,9 +151,9 @@ public static String getTokenValue() {
/**
* 获取当前请求的 token 值 (不裁剪前缀)
*
- * @return /
+ * @return /
*/
- public static String getTokenValueNotCut(){
+ public static String getTokenValueNotCut() {
return stpLogic.getTokenValueNotCut();
}
@@ -162,10 +166,9 @@ public static SaTokenInfo getTokenInfo() {
return stpLogic.getTokenInfo();
}
-
// ------------------- 登录相关操作 -------------------
- // --- 登录
+ // --- 登录
/**
* 会话登录
@@ -179,7 +182,7 @@ public static void login(Object id) {
/**
* 会话登录,并指定登录设备类型
*
- * @param id 账号id,建议的类型:(long | int | String)
+ * @param id 账号id,建议的类型:(long | int | String)
* @param deviceType 设备类型
*/
public static void login(Object id, String deviceType) {
@@ -189,7 +192,7 @@ public static void login(Object id, String deviceType) {
/**
* 会话登录,并指定是否 [记住我]
*
- * @param id 账号id,建议的类型:(long | int | String)
+ * @param id 账号id,建议的类型:(long | int | String)
* @param isLastingCookie 是否为持久Cookie,值为 true 时记住我,值为 false 时关闭浏览器需要重新登录
*/
public static void login(Object id, boolean isLastingCookie) {
@@ -209,7 +212,7 @@ public static void login(Object id, long timeout) {
/**
* 会话登录,并指定所有登录参数 Model
*
- * @param id 账号id,建议的类型:(long | int | String)
+ * @param id 账号id,建议的类型:(long | int | String)
* @param loginParameter 此次登录的参数Model
*/
public static void login(Object id, SaLoginParameter loginParameter) {
@@ -229,8 +232,8 @@ public static String createLoginSession(Object id) {
/**
* 创建指定账号 id 的登录会话数据
*
- * @param id 账号id,建议的类型:(long | int | String)
- * @param loginParameter 此次登录的参数Model
+ * @param id 账号id,建议的类型:(long | int | String)
+ * @param loginParameter 此次登录的参数Model
* @return 返回会话令牌
*/
public static String createLoginSession(Object id, SaLoginParameter loginParameter) {
@@ -275,7 +278,7 @@ public static void logoutByTokenValue(String tokenValue) {
/**
* 注销下线,根据指定 token、注销参数
*
- * @param tokenValue 指定 token
+ * @param tokenValue 指定 token
* @param logoutParameter /
*/
public static void logoutByTokenValue(String tokenValue, SaLogoutParameter logoutParameter) {
@@ -284,7 +287,9 @@ public static void logoutByTokenValue(String tokenValue, SaLogoutParameter logou
/**
* 踢人下线,根据指定 token
- *
当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5
+ *+ * 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5 + *
* * @param tokenValue 指定 token */ @@ -294,9 +299,11 @@ public static void kickoutByTokenValue(String tokenValue) { /** * 踢人下线,根据指定 token、注销参数 - *当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5
+ *+ * 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5 + *
* - * @param tokenValue 指定 token + * @param tokenValue 指定 token * @param logoutParameter 注销参数 */ public static void kickoutByTokenValue(String tokenValue, SaLogoutParameter logoutParameter) { @@ -305,7 +312,9 @@ public static void kickoutByTokenValue(String tokenValue, SaLogoutParameter logo /** * 顶人下线,根据指定 token - *当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4
+ *+ * 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4 + *
* * @param tokenValue 指定 token */ @@ -315,9 +324,11 @@ public static void replacedByTokenValue(String tokenValue) { /** * 顶人下线,根据指定 token、注销参数 - *当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4
+ *+ * 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4 + *
* - * @param tokenValue 指定 token + * @param tokenValue 指定 token * @param logoutParameter / */ public static void replacedByTokenValue(String tokenValue, SaLogoutParameter logoutParameter) { @@ -338,7 +349,7 @@ public static void logout(Object loginId) { /** * 会话注销,根据账号id 和 设备类型 * - * @param loginId 账号id + * @param loginId 账号id * @param deviceType 设备类型 (填 null 代表注销该账号的所有设备类型) */ public static void logout(Object loginId, String deviceType) { @@ -348,7 +359,7 @@ public static void logout(Object loginId, String deviceType) { /** * 会话注销,根据账号id 和 注销参数 * - * @param loginId 账号id + * @param loginId 账号id * @param logoutParameter 注销参数 */ public static void logout(Object loginId, SaLogoutParameter logoutParameter) { @@ -357,7 +368,9 @@ public static void logout(Object loginId, SaLogoutParameter logoutParameter) { /** * 踢人下线,根据账号id - *当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5
+ *+ * 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5 + *
* * @param loginId 账号id */ @@ -367,9 +380,11 @@ public static void kickout(Object loginId) { /** * 踢人下线,根据账号id 和 设备类型 - *当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5
+ *+ * 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5 + *
* - * @param loginId 账号id + * @param loginId 账号id * @param deviceType 设备类型 (填 null 代表踢出该账号的所有设备类型) */ public static void kickout(Object loginId, String deviceType) { @@ -378,9 +393,11 @@ public static void kickout(Object loginId, String deviceType) { /** * 踢人下线,根据账号id 和 注销参数 - *当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5
+ *+ * 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-5 + *
* - * @param loginId 账号id + * @param loginId 账号id * @param logoutParameter 注销参数 */ public static void kickout(Object loginId, SaLogoutParameter logoutParameter) { @@ -389,7 +406,9 @@ public static void kickout(Object loginId, SaLogoutParameter logoutParameter) { /** * 顶人下线,根据账号id - *当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4
+ *+ * 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4 + *
* * @param loginId 账号id */ @@ -399,9 +418,11 @@ public static void replaced(Object loginId) { /** * 顶人下线,根据账号id 和 设备类型 - *当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4
+ *+ * 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4 + *
* - * @param loginId 账号id + * @param loginId 账号id * @param deviceType 设备类型 (填 null 代表顶替该账号的所有设备类型) */ public static void replaced(Object loginId, String deviceType) { @@ -410,9 +431,11 @@ public static void replaced(Object loginId, String deviceType) { /** * 顶人下线,根据账号id 和 注销参数 - *当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4
+ *+ * 当对方再次访问系统时,会抛出 NotLoginException 异常,场景值=-4 + *
* - * @param loginId 账号id + * @param loginId 账号id * @param logoutParameter 注销参数 */ public static void replaced(Object loginId, SaLogoutParameter logoutParameter) { @@ -423,7 +446,8 @@ public static void replaced(Object loginId, SaLogoutParameter logoutParameter) { /** * 在 Account-Session 上移除 Terminal 信息 (注销下线方式) - * @param session / + * + * @param session / * @param terminal / */ public static void removeTerminalByLogout(SaSession session, SaTerminalInfo terminal) { @@ -432,7 +456,8 @@ public static void removeTerminalByLogout(SaSession session, SaTerminalInfo term /** * 在 Account-Session 上移除 Terminal 信息 (踢人下线方式) - * @param session / + * + * @param session / * @param terminal / */ public static void removeTerminalByKickout(SaSession session, SaTerminalInfo terminal) { @@ -441,14 +466,14 @@ public static void removeTerminalByKickout(SaSession session, SaTerminalInfo ter /** * 在 Account-Session 上移除 Terminal 信息 (顶人下线方式) - * @param session / + * + * @param session / * @param terminal / */ public static void removeTerminalByReplaced(SaSession session, SaTerminalInfo terminal) { stpLogic.removeTerminalByReplaced(session, terminal); } - // 会话查询 /** @@ -472,9 +497,9 @@ public static boolean isLogin(Object loginId) { /** * 检验当前会话是否已经登录,如未登录,则抛出异常 */ - public static void checkLogin() { - stpLogic.checkLogin(); - } + public static void checkLogin() { + stpLogic.checkLogin(); + } /** * 获取当前会话账号id,如果未登录,则抛出异常 @@ -488,7 +513,7 @@ public static Object getLoginId() { /** * 获取当前会话账号id, 如果未登录,则返回默认值 * - * @param- * 在配置为允许并发登录时,此方法只会返回队列的最后一个 token, - * 如果你需要返回此账号 id 的所有 token,请调用 getTokenValueListByLoginId + * 在配置为允许并发登录时,此方法只会返回队列的最后一个 token, + * 如果你需要返回此账号 id 的所有 token,请调用 getTokenValueListByLoginId *
* * @param loginId 账号id @@ -955,11 +974,11 @@ public static String getTokenValueByLoginId(Object loginId) { /** * 获取指定账号 id 指定设备类型端的 token *- * 在配置为允许并发登录时,此方法只会返回队列的最后一个 token, - * 如果你需要返回此账号 id 的所有 token,请调用 getTokenValueListByLoginId + * 在配置为允许并发登录时,此方法只会返回队列的最后一个 token, + * 如果你需要返回此账号 id 的所有 token,请调用 getTokenValueListByLoginId *
* - * @param loginId 账号id + * @param loginId 账号id * @param deviceType 设备类型,填 null 代表不限设备类型 * @return token值 */ @@ -980,7 +999,7 @@ public static List此方法不会直接将此账号id踢下线,如需封禁后立即掉线,请追加调用 StpUtil.logout(id) + *
+ * 此方法不会直接将此账号id踢下线,如需封禁后立即掉线,请追加调用 StpUtil.logout(id) * - * @param loginId 指定账号id - * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + * @param loginId 指定账号id + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) */ public static void disable(Object loginId, long time) { stpLogic.disable(loginId, time); } /** - * 判断:指定账号是否已被封禁 (true=已被封禁, false=未被封禁) + * 判断:指定账号是否已被封禁 (true=已被封禁, false=未被封禁) * * @param loginId 账号id - * @return / + * @return / */ public static boolean isDisable(Object loginId) { return stpLogic.isDisable(loginId); @@ -1168,7 +1186,7 @@ public static void checkDisable(Object loginId) { * 获取:指定账号剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁) * * @param loginId 账号id - * @return / + * @return / */ public static long getDisableTime(Object loginId) { return stpLogic.getDisableTime(loginId); @@ -1183,16 +1201,16 @@ public static void untieDisable(Object loginId) { stpLogic.untieDisable(loginId); } - - // ------------------- 分类封禁 ------------------- + // ------------------- 分类封禁 ------------------- /** - * 封禁:指定账号的指定服务 - *
此方法不会直接将此账号id踢下线,如需封禁后立即掉线,请追加调用 StpUtil.logout(id) + * 封禁:指定账号的指定服务 + *
+ * 此方法不会直接将此账号id踢下线,如需封禁后立即掉线,请追加调用 StpUtil.logout(id) * * @param loginId 指定账号id - * @param service 指定服务 - * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + * @param service 指定服务 + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) */ public static void disable(Object loginId, String service, long time) { stpLogic.disable(loginId, service, time); @@ -1202,8 +1220,8 @@ public static void disable(Object loginId, String service, long time) { * 判断:指定账号的指定服务 是否已被封禁(true=已被封禁, false=未被封禁) * * @param loginId 账号id - * @param service 指定服务 - * @return / + * @param service 指定服务 + * @return / */ public static boolean isDisable(Object loginId, String service) { return stpLogic.isDisable(loginId, service); @@ -1212,8 +1230,8 @@ public static boolean isDisable(Object loginId, String service) { /** * 校验:指定账号 指定服务 是否已被封禁,如果被封禁则抛出异常 * - * @param loginId 账号id - * @param services 指定服务,可以指定多个 + * @param loginId 账号id + * @param services 指定服务,可以指定多个 */ public static void checkDisable(Object loginId, String... services) { stpLogic.checkDisable(loginId, services); @@ -1223,8 +1241,8 @@ public static void checkDisable(Object loginId, String... services) { * 获取:指定账号 指定服务 剩余封禁时间,单位:秒(-1=永久封禁,-2=未被封禁) * * @param loginId 账号id - * @param service 指定服务 - * @return see note + * @param service 指定服务 + * @return see note */ public static long getDisableTime(Object loginId, String service) { return stpLogic.getDisableTime(loginId, service); @@ -1233,22 +1251,21 @@ public static long getDisableTime(Object loginId, String service) { /** * 解封:指定账号、指定服务 * - * @param loginId 账号id - * @param services 指定服务,可以指定多个 + * @param loginId 账号id + * @param services 指定服务,可以指定多个 */ public static void untieDisable(Object loginId, String... services) { stpLogic.untieDisable(loginId, services); } - - // ------------------- 阶梯封禁 ------------------- + // ------------------- 阶梯封禁 ------------------- /** * 封禁:指定账号,并指定封禁等级 * - * @param loginId 指定账号id - * @param level 指定封禁等级 - * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + * @param loginId 指定账号id + * @param level 指定封禁等级 + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) */ public static void disableLevel(Object loginId, int level, long time) { stpLogic.disableLevel(loginId, level, time); @@ -1257,10 +1274,10 @@ public static void disableLevel(Object loginId, int level, long time) { /** * 封禁:指定账号的指定服务,并指定封禁等级 * - * @param loginId 指定账号id - * @param service 指定封禁服务 - * @param level 指定封禁等级 - * @param time 封禁时间, 单位: 秒 (-1=永久封禁) + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @param level 指定封禁等级 + * @param time 封禁时间, 单位: 秒 (-1=永久封禁) */ public static void disableLevel(Object loginId, String service, int level, long time) { stpLogic.disableLevel(loginId, service, level, time); @@ -1269,21 +1286,21 @@ public static void disableLevel(Object loginId, String service, int level, long /** * 判断:指定账号是否已被封禁到指定等级 * - * @param loginId 指定账号id - * @param level 指定封禁等级 - * @return / + * @param loginId 指定账号id + * @param level 指定封禁等级 + * @return / */ public static boolean isDisableLevel(Object loginId, int level) { return stpLogic.isDisableLevel(loginId, level); } /** - * 判断:指定账号的指定服务,是否已被封禁到指定等级 + * 判断:指定账号的指定服务,是否已被封禁到指定等级 * - * @param loginId 指定账号id - * @param service 指定封禁服务 - * @param level 指定封禁等级 - * @return / + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @param level 指定封禁等级 + * @return / */ public static boolean isDisableLevel(Object loginId, String service, int level) { return stpLogic.isDisableLevel(loginId, service, level); @@ -1292,8 +1309,8 @@ public static boolean isDisableLevel(Object loginId, String service, int level) /** * 校验:指定账号是否已被封禁到指定等级(如果已经达到,则抛出异常) * - * @param loginId 指定账号id - * @param level 封禁等级 (只有 封禁等级 ≥ 此值 才会抛出异常) + * @param loginId 指定账号id + * @param level 封禁等级 (只有 封禁等级 ≥ 此值 才会抛出异常) */ public static void checkDisableLevel(Object loginId, int level) { stpLogic.checkDisableLevel(loginId, level); @@ -1302,42 +1319,41 @@ public static void checkDisableLevel(Object loginId, int level) { /** * 校验:指定账号的指定服务,是否已被封禁到指定等级(如果已经达到,则抛出异常) * - * @param loginId 指定账号id - * @param service 指定封禁服务 - * @param level 封禁等级 (只有 封禁等级 ≥ 此值 才会抛出异常) + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @param level 封禁等级 (只有 封禁等级 ≥ 此值 才会抛出异常) */ public static void checkDisableLevel(Object loginId, String service, int level) { stpLogic.checkDisableLevel(loginId, service, level); } /** - * 获取:指定账号被封禁的等级,如果未被封禁则返回-2 + * 获取:指定账号被封禁的等级,如果未被封禁则返回-2 * - * @param loginId 指定账号id - * @return / + * @param loginId 指定账号id + * @return / */ public static int getDisableLevel(Object loginId) { return stpLogic.getDisableLevel(loginId); } /** - * 获取:指定账号的 指定服务 被封禁的等级,如果未被封禁则返回-2 + * 获取:指定账号的 指定服务 被封禁的等级,如果未被封禁则返回-2 * - * @param loginId 指定账号id - * @param service 指定封禁服务 - * @return / + * @param loginId 指定账号id + * @param service 指定封禁服务 + * @return / */ public static int getDisableLevel(Object loginId, String service) { return stpLogic.getDisableLevel(loginId, service); } - - + // ------------------- 临时身份切换 ------------------- /** * 临时切换身份为指定账号id * - * @param loginId 指定loginId + * @param loginId 指定loginId */ public static void switchTo(Object loginId) { stpLogic.switchTo(loginId); @@ -1362,20 +1378,19 @@ public static boolean isSwitch() { /** * 在一个 lambda 代码段里,临时切换身份为指定账号id,lambda 结束后自动恢复 * - * @param loginId 指定账号id - * @param function 要执行的方法 + * @param loginId 指定账号id + * @param function 要执行的方法 */ public static void switchTo(Object loginId, SaFunction function) { stpLogic.switchTo(loginId, function); } - - // ------------------- 二级认证 ------------------- + // ------------------- 二级认证 ------------------- /** * 在当前会话 开启二级认证 * - * @param safeTime 维持时间 (单位: 秒) + * @param safeTime 维持时间 (单位: 秒) */ public static void openSafe(long safeTime) { stpLogic.openSafe(safeTime); @@ -1384,8 +1399,8 @@ public static void openSafe(long safeTime) { /** * 在当前会话 开启二级认证 * - * @param service 业务标识 - * @param safeTime 维持时间 (单位: 秒) + * @param service 业务标识 + * @param safeTime 维持时间 (单位: 秒) */ public static void openSafe(String service, long safeTime) { stpLogic.openSafe(service, safeTime); @@ -1394,7 +1409,7 @@ public static void openSafe(String service, long safeTime) { /** * 判断:当前会话是否处于二级认证时间内 * - * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 + * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 */ public static boolean isSafe() { return stpLogic.isSafe(); @@ -1403,8 +1418,8 @@ public static boolean isSafe() { /** * 判断:当前会话 是否处于指定业务的二级认证时间内 * - * @param service 业务标识 - * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 + * @param service 业务标识 + * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 */ public static boolean isSafe(String service) { return stpLogic.isSafe(service); @@ -1413,9 +1428,9 @@ public static boolean isSafe(String service) { /** * 判断:指定 token 是否处于二级认证时间内 * - * @param tokenValue Token 值 - * @param service 业务标识 - * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 + * @param tokenValue Token 值 + * @param service 业务标识 + * @return true=二级认证已通过, false=尚未进行二级认证或认证已超时 */ public static boolean isSafe(String tokenValue, String service) { return stpLogic.isSafe(tokenValue, service); @@ -1431,7 +1446,7 @@ public static void checkSafe() { /** * 校验:检查当前会话是否已通过指定业务的二级认证,如未通过则抛出异常 * - * @param service 业务标识 + * @param service 业务标识 */ public static void checkSafe(String service) { stpLogic.checkSafe(service); @@ -1449,7 +1464,7 @@ public static long getSafeTime() { /** * 获取:当前会话的二级认证剩余有效时间(单位: 秒, 返回-2代表尚未通过二级认证) * - * @param service 业务标识 + * @param service 业务标识 * @return 剩余有效时间 */ public static long getSafeTime(String service) { @@ -1457,7 +1472,7 @@ public static long getSafeTime(String service) { } /** - * 在当前会话 结束二级认证 + * 在当前会话 结束二级认证 */ public static void closeSafe() { stpLogic.closeSafe(); @@ -1466,13 +1481,12 @@ public static void closeSafe() { /** * 在当前会话 结束指定业务标识的二级认证 * - * @param service 业务标识 + * @param service 业务标识 */ public static void closeSafe(String service) { stpLogic.closeSafe(service); } - // ------------------- Bean 对象、字段代理 ------------------- /** @@ -1484,11 +1498,10 @@ public static SaLoginParameter createSaLoginParameter() { return stpLogic.createSaLoginParameter(); } - // ------------------- 过期方法 ------------------- /** - *
* 此类统一定义框架内的一些关键性逻辑算法,方便开发者进行按需重写,例: *
+ * *
- // SaStrategy全局单例,所有方法都用以下形式重写
- SaStrategy.instance.setCreateToken((loginId, loginType) -》 {
- // 自定义Token生成的算法
- return "xxxx";
- });
+ * // SaStrategy全局单例,所有方法都用以下形式重写
+ * SaStrategy.instance.setCreateToken((loginId, loginType) -> {
+ * // 自定义Token生成的算法
+ * return "xxxx";
+ * });
*
*
* @author click33
@@ -53,7 +54,6 @@ private SaStrategy() {
*/
public static final SaStrategy instance = new SaStrategy();
-
// ----------------------- 所有策略
/**
@@ -86,7 +86,8 @@ private SaStrategy() {
// tik风格 (2_14_16)
case SaTokenConsts.TOKEN_STYLE_TIK:
- return SaFoxUtil.getRandomString(2) + "_" + SaFoxUtil.getRandomString(14) + "_" + SaFoxUtil.getRandomString(16) + "__";
+ return SaFoxUtil.getRandomString(2) + "_" + SaFoxUtil.getRandomString(14) + "_"
+ + SaFoxUtil.getRandomString(16) + "__";
// 默认,还是uuid
default:
@@ -114,7 +115,7 @@ private SaStrategy() {
public SaHasElementFunction hasElement = (list, element) -> {
// 空集合直接返回false
- if(list == null || list.size() == 0) {
+ if (list == null || list.size() == 0) {
return false;
}
@@ -125,7 +126,7 @@ private SaStrategy() {
// 开始模糊匹配
for (String patt : list) {
- if(SaFoxUtil.vagueMatch(patt, element)) {
+ if (SaFoxUtil.vagueMatch(patt, element)) {
return true;
}
}
@@ -137,12 +138,13 @@ private SaStrategy() {
/**
* 生成唯一式 token 的算法
*/
- public SaGenerateUniqueTokenFunction generateUniqueToken = (elementName, maxTryTimes, createTokenFunction, checkTokenFunction) -> {
+ public SaGenerateUniqueTokenFunction generateUniqueToken = (elementName, maxTryTimes, createTokenFunction,
+ checkTokenFunction) -> {
// 为方便叙述,以下代码注释均假设在处理生成 token 的场景,但实际上本方法也可能被用于生成 code、ticket 等
// 循环生成
- for (int i = 1; ; i++) {
+ for (int i = 1;; i++) {
// 生成 token
String token = createTokenFunction.get();
@@ -164,11 +166,11 @@ private SaStrategy() {
};
/**
- * 是否自动续期 active-timeout
- */
- public SaAutoRenewFunction autoRenew = (stpLogic) -> {
- return stpLogic.getConfigOrGlobal().getAutoRenew();
- };
+ * 是否自动续期 active-timeout
+ */
+ public SaAutoRenewFunction autoRenew = (stpLogic) -> {
+ return stpLogic.getConfigOrGlobal().getAutoRenew();
+ };
/**
* 创建 StpLogic 的算法
@@ -191,7 +193,6 @@ private SaStrategy() {
};
-
// ----------------------- 重写策略 set连缀风格
/**
@@ -250,15 +251,15 @@ public SaStrategy setCreateStpLogic(SaCreateStpLogicFunction createStpLogic) {
}
/**
- * 是否自动续期
- *
- * @param autoRenew /
- * @return /
- */
- public SaStrategy setAutoRenew(SaAutoRenewFunction autoRenew) {
- this.autoRenew = autoRenew;
- return this;
- }
+ * 是否自动续期
+ *
+ * @param autoRenew /
+ * @return /
+ */
+ public SaStrategy setAutoRenew(SaAutoRenewFunction autoRenew) {
+ this.autoRenew = autoRenew;
+ return this;
+ }
//
diff --git a/sa-token-doc/arch/dir-intro.md b/sa-token-doc/arch/dir-intro.md
index 187794155..33ff8a67a 100644
--- a/sa-token-doc/arch/dir-intro.md
+++ b/sa-token-doc/arch/dir-intro.md
@@ -104,7 +104,7 @@
├── page_project // [示例] Sa-Token 实现 [ 记住我 ] 模式、前端页面
├── sa-token-demo-remember-me-server // [示例] Sa-Token 实现 [ 记住我 ] 模式、后端接口
├── sa-token-demo-solon // [示例] Sa-Token 集成 Solon
- ├── sa-token-demo-solon-reisson // [示例] Sa-Token 集成 Solon、Reisson
+ ├── sa-token-demo-solon-redisson // [示例] Sa-Token 集成 Solon、Redisson
├── sa-token-demo-springboot // [示例] Sa-Token 整合 SpringBoot
├── sa-token-demo-springboot3-redis // [示例] Sa-Token 整合 SpringBoot3 整合 Redis
├── sa-token-demo-springboot-low-version // [示例] Sa-Token 整合 SpringBoot2 低版本