From ba5784abecd5f9a65c42f42d3e29ed3b079010c9 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Thu, 30 Sep 2021 02:38:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E8=AE=A4=E8=AF=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E6=96=B0=E5=A2=9E=20deleteToken=20=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E5=9B=9E=E6=94=B6=20Token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev33/satoken/config/SaTokenConfig.java | 30 ++++++++++++++----- .../satoken/config/SaTokenConfigFactory.java | 2 +- .../context/SaTokenContextDefaultImpl.java | 8 ++++- .../context/SaTokenContextForThreadLocal.java | 6 ++++ .../SaTokenContextForThreadLocalStorage.java | 1 + .../satoken/dao/SaTokenDaoDefaultImpl.java | 4 +-- .../satoken/exception/StopMatchException.java | 2 +- .../cn/dev33/satoken/id/SaIdTemplate.java | 6 ++-- .../satoken/session/SaSessionCustomUtil.java | 18 +++++++++-- .../cn/dev33/satoken/session/TokenSign.java | 4 +-- .../cn/dev33/satoken/stp/SaLoginModel.java | 1 - .../dev33/satoken/temp/SaTempInterface.java | 11 ++++++- .../java/com/pj/SaTokenDemoApplication.java | 4 --- sa-token-doc/doc/plugin/temp-token.md | 5 +++- .../dev33/satoken/temp/jwt/SaTempForJwt.java | 20 ++++++++++--- 15 files changed, 91 insertions(+), 31 deletions(-) diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java b/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java index b6598f91..7aeb5e83 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfig.java @@ -74,7 +74,7 @@ public class SaTokenConfig implements Serializable { /** * jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效) */ - private String jwtSecretKey; + private String jwtSecretkey; /** * Id-Token的有效期 (单位: 秒) @@ -391,16 +391,16 @@ public class SaTokenConfig implements Serializable { /** * @return jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效) */ - public String getJwtSecretKey() { - return jwtSecretKey; + public String getJwtSecretkey() { + return jwtSecretkey; } /** - * @param jwtSecretKey jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效) + * @param jwtSecretkey jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效) * @return 对象自身 */ - public SaTokenConfig setJwtSecretKey(String jwtSecretKey) { - this.jwtSecretKey = jwtSecretKey; + public SaTokenConfig setJwtSecretkey(String jwtSecretkey) { + this.jwtSecretkey = jwtSecretkey; return this; } @@ -476,10 +476,11 @@ public class SaTokenConfig implements Serializable { + ", tokenStyle=" + tokenStyle + ", dataRefreshPeriod=" + dataRefreshPeriod + ", tokenSessionCheckLogin=" + tokenSessionCheckLogin + ", autoRenew=" + autoRenew + ", cookieDomain=" + cookieDomain + ", tokenPrefix=" + tokenPrefix - + ", isPrint=" + isPrint + ", isLog=" + isLog + ", jwtSecretKey=" + jwtSecretKey + ", idTokenTimeout=" + + ", isPrint=" + isPrint + ", isLog=" + isLog + ", jwtSecretkey=" + jwtSecretkey + ", idTokenTimeout=" + idTokenTimeout + ", basic=" + basic + ", currDomain=" + currDomain + ", sso=" + sso + "]"; } + /** *

本函数设计已过时,未来版本可能移除此函数,请及时更换为 setIsConcurrent() ,使用方式保持不变

* @param allowConcurrentLogin see note @@ -501,5 +502,20 @@ public class SaTokenConfig implements Serializable { return this; } + /** + * @return

本函数设计已过时,未来版本可能移除此函数,请及时更换为 getJwtSecretkey() ,使用方式保持不变

+ */ + public String getJwtSecretKey() { + return jwtSecretkey; + } + + /** + * @param

本函数设计已过时,未来版本可能移除此函数,请及时更换为 setJwtSecretkey() ,使用方式保持不变

+ * @return 对象自身 + */ + public SaTokenConfig setJwtSecretKey(String jwtSecretKey) { + this.jwtSecretkey = jwtSecretKey; + return this; + } } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfigFactory.java b/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfigFactory.java index 1c7f195a..542ca7f0 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfigFactory.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/config/SaTokenConfigFactory.java @@ -10,7 +10,7 @@ import java.util.Properties; /** * Sa-Token配置文件的构建工厂类 *

- * 只有在非IOC环境下才会用到此类 + * 用于手动读取配置文件初始化 SaTokenConfig 对象,只有在非IOC环境下你才会用到此类 * * @author kong * diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextDefaultImpl.java b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextDefaultImpl.java index 45aab504..fbc95068 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextDefaultImpl.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextDefaultImpl.java @@ -6,7 +6,13 @@ import cn.dev33.satoken.context.model.SaResponse; import cn.dev33.satoken.exception.SaTokenException; /** - * Sa-Token 上下文处理器 [默认实现类] + * Sa-Token 上下文处理器 [默认实现类] + * + *

+ * 一般情况下框架会为你自动注入合适的上下文处理器,如果代码断点走到了此默认实现类, + * 说明你引入的依赖有问题或者错误的调用了Sa-Token的API, 请在[在线开发文档 > 附录 > 常见问题排查] 中按照提示进行排查 + *

+ * * @author kong * */ diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocal.java b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocal.java index 02dd2c68..a2c75b6e 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocal.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocal.java @@ -6,6 +6,12 @@ import cn.dev33.satoken.context.model.SaStorage; /** * Sa-Token 上下文处理器 [ThreadLocal版本] + * + *

+ * 使用 [ThreadLocal版本] 上下文处理器需要在全局过滤器或者拦截器内率先调用 + * SaTokenContextForThreadLocalStorage.setBox(req,res, sto) 初始化上下文 + *

+ * * @author kong * */ diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocalStorage.java b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocalStorage.java index 4c4813bc..c737a180 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocalStorage.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocalStorage.java @@ -7,6 +7,7 @@ import cn.dev33.satoken.exception.SaTokenException; /** * Sa-Token 上下文处理器 [ThreadLocal版本] ---- 对象存储器 + * * @author kong * */ diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java b/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java index 81839c61..dc612384 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java @@ -176,7 +176,7 @@ public class SaTokenDaoDefaultImpl implements SaTokenDao { /** * 是否继续执行数据清理的线程标记 */ - public boolean refreshFlag; + public volatile boolean refreshFlag; /** @@ -224,7 +224,7 @@ public class SaTokenDaoDefaultImpl implements SaTokenDao { } } }); - refreshThread.start(); + this.refreshThread.start(); } /** diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/exception/StopMatchException.java b/sa-token-core/src/main/java/cn/dev33/satoken/exception/StopMatchException.java index 8f279331..2fa4366f 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/exception/StopMatchException.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/exception/StopMatchException.java @@ -1,7 +1,7 @@ package cn.dev33.satoken.exception; /** - * 一个异常:代表停止路由匹配 + * 一个异常:代表停止路由匹配,进入Controller * * @author kong */ diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/id/SaIdTemplate.java b/sa-token-core/src/main/java/cn/dev33/satoken/id/SaIdTemplate.java index 2b0ebf13..39cc4659 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/id/SaIdTemplate.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/id/SaIdTemplate.java @@ -147,14 +147,14 @@ public class SaIdTemplate { * @return Token */ public String createToken() { - return SaFoxUtil.getRandomString(60); + return SaFoxUtil.getRandomString(64); } // -------------------- 拼接key /** - * 拼接key:Id-Token的存储key + * 拼接key:Id-Token 的存储 key * @return key */ public String splicingTokenSaveKey() { @@ -162,7 +162,7 @@ public class SaIdTemplate { } /** - * 拼接key:Id-Token的存储key + * 拼接key:次级 Id-Token 的存储 key * @return key */ public String splicingPastTokenSaveKey() { diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSessionCustomUtil.java b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSessionCustomUtil.java index bb787c02..23a9c5d5 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSessionCustomUtil.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSessionCustomUtil.java @@ -4,7 +4,19 @@ import cn.dev33.satoken.SaManager; import cn.dev33.satoken.strategy.SaStrategy; /** - * 自定义Session工具类 + * 自定义 Session 工具类 + * + *

样例: + *

+ * 		// 在一处代码写入数据 
+ * 		SaSession session = SaSessionCustomUtil.getSessionById("role-" + 1001);
+ * 		session.set("count", 1);
+ * 	
+ * 		// 在另一处代码获取数据 
+ * 		SaSession session = SaSessionCustomUtil.getSessionById("role-" + 1001);
+ * 		int count = session.getInt("count");
+ * 		System.out.println("count=" + count);
+ * 
* * @author kong * @@ -12,12 +24,12 @@ import cn.dev33.satoken.strategy.SaStrategy; public class SaSessionCustomUtil { /** - * 添加上指定前缀,防止恶意伪造Session + * 添加上指定前缀,防止恶意伪造Session */ public static String sessionKey = "custom"; /** - * 拼接Key: 自定义Session的Id + * 拼接Key: 自定义Session的Id * * @param sessionId 会话id * @return sessionId diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/session/TokenSign.java b/sa-token-core/src/main/java/cn/dev33/satoken/session/TokenSign.java index 851a888d..4342da39 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/session/TokenSign.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/session/TokenSign.java @@ -3,7 +3,7 @@ package cn.dev33.satoken.session; import java.io.Serializable; /** - * Token签名 Model + * Token 签名 Model * * 挂在到SaSession上的token签名 * @@ -43,7 +43,7 @@ public class TokenSign implements Serializable { } /** - * @return token value + * @return token值 */ public String getValue() { return value; diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginModel.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginModel.java index 3fa3192a..c2aa1609 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginModel.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginModel.java @@ -12,7 +12,6 @@ import cn.dev33.satoken.util.SaTokenConsts; */ public class SaLoginModel { - /** * 此次登录的客户端设备标识 */ diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempInterface.java b/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempInterface.java index 1cef35d5..fe727dae 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempInterface.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempInterface.java @@ -61,6 +61,15 @@ public interface SaTempInterface { String key = splicingKeyTempToken(token); return SaManager.getSaTokenDao().getObjectTimeout(key); } + + /** + * 删除一个token + * @param token 指定token + */ + public default void deleteToken(String token) { + String key = splicingKeyTempToken(token); + SaManager.getSaTokenDao().deleteObject(key); + } /** * 获取映射关系的持久化key @@ -74,7 +83,7 @@ public interface SaTempInterface { /** * @return jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效) */ - public default String getJwtSecretKey() { + public default String getJwtSecretkey() { return null; } 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 a312fae4..3da66ead 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 @@ -1,7 +1,5 @@ package com.pj; -import cn.dev33.satoken.annotation.SaCheckBasic; -import cn.dev33.satoken.annotation.SaCheckPermission; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -15,8 +13,6 @@ import cn.dev33.satoken.SaManager; @SpringBootApplication public class SaTokenDemoApplication { - @SaCheckPermission - @SaCheckBasic public static void main(String[] args) { SpringApplication.run(SaTokenDemoApplication.class, args); System.out.println("\n启动成功:Sa-Token配置如下:" + SaManager.getConfig()); diff --git a/sa-token-doc/doc/plugin/temp-token.md b/sa-token-doc/doc/plugin/temp-token.md index 979b23ce..3b847ca9 100644 --- a/sa-token-doc/doc/plugin/temp-token.md +++ b/sa-token-doc/doc/plugin/temp-token.md @@ -48,6 +48,9 @@ String value = SaTempUtil.parseToken(token, String.class); // 获取指定 token 的剩余有效期,单位:秒 SaTempUtil.getTimeout(token); + +// 删除指定 token +SaTempUtil.deleteToken(token); ``` @@ -68,5 +71,5 @@ SaTempUtil.getTimeout(token); ``` java sa-token: # sa-token-temp-jwt 模块的秘钥 (随便乱摁几个字母就行了) - jwt-secret-key: JfdDSgfCmPsDfmsAaQwnXk + jwt-secretkey: JfdDSgfCmPsDfmsAaQwnXk ``` diff --git a/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaTempForJwt.java b/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaTempForJwt.java index 60c157fc..3255ff31 100644 --- a/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaTempForJwt.java +++ b/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaTempForJwt.java @@ -15,32 +15,44 @@ public class SaTempForJwt implements SaTempInterface { /** * 根据value创建一个token */ + @Override public String createToken(Object value, long timeout) { - String token = SaJwtUtil.createToken(value, timeout, getJwtSecretKey()); + String token = SaJwtUtil.createToken(value, timeout, getJwtSecretkey()); return token; } /** * 解析token获取value */ + @Override public Object parseToken(String token) { - Object value = SaJwtUtil.getValue(token, getJwtSecretKey()); + Object value = SaJwtUtil.getValue(token, getJwtSecretkey()); return value; } /** * 返回指定token的剩余有效期,单位:秒 */ + @Override public long getTimeout(String token) { - long timeout = SaJwtUtil.getTimeout(token, getJwtSecretKey()); + long timeout = SaJwtUtil.getTimeout(token, getJwtSecretkey()); return timeout; } + + /** + * 删除一个token + */ + @Override + public void deleteToken(String token) { + throw new SaTokenException("jwt cannot delete token"); + } /** * 获取jwt秘钥 * @return jwt秘钥 */ - public String getJwtSecretKey() { + @Override + public String getJwtSecretkey() { String jwtSecretKey = SaManager.getConfig().getJwtSecretKey(); if(SaFoxUtil.isEmpty(jwtSecretKey)) { throw new SaTokenException("请配置:jwtSecretKey");