mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-09-20 02:29:27 +08:00
临时认证模块新增 deleteToken 方法用于回收 Token
This commit is contained in:
@@ -74,7 +74,7 @@ public class SaTokenConfig implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效)
|
* jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效)
|
||||||
*/
|
*/
|
||||||
private String jwtSecretKey;
|
private String jwtSecretkey;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Id-Token的有效期 (单位: 秒)
|
* Id-Token的有效期 (单位: 秒)
|
||||||
@@ -391,16 +391,16 @@ public class SaTokenConfig implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* @return jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效)
|
* @return jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效)
|
||||||
*/
|
*/
|
||||||
public String getJwtSecretKey() {
|
public String getJwtSecretkey() {
|
||||||
return jwtSecretKey;
|
return jwtSecretkey;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param jwtSecretKey jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效)
|
* @param jwtSecretkey jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效)
|
||||||
* @return 对象自身
|
* @return 对象自身
|
||||||
*/
|
*/
|
||||||
public SaTokenConfig setJwtSecretKey(String jwtSecretKey) {
|
public SaTokenConfig setJwtSecretkey(String jwtSecretkey) {
|
||||||
this.jwtSecretKey = jwtSecretKey;
|
this.jwtSecretkey = jwtSecretkey;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -476,10 +476,11 @@ public class SaTokenConfig implements Serializable {
|
|||||||
+ ", tokenStyle=" + tokenStyle
|
+ ", tokenStyle=" + tokenStyle
|
||||||
+ ", dataRefreshPeriod=" + dataRefreshPeriod + ", tokenSessionCheckLogin=" + tokenSessionCheckLogin
|
+ ", dataRefreshPeriod=" + dataRefreshPeriod + ", tokenSessionCheckLogin=" + tokenSessionCheckLogin
|
||||||
+ ", autoRenew=" + autoRenew + ", cookieDomain=" + cookieDomain + ", tokenPrefix=" + tokenPrefix
|
+ ", 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 + "]";
|
+ idTokenTimeout + ", basic=" + basic + ", currDomain=" + currDomain + ", sso=" + sso + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 setIsConcurrent() ,使用方式保持不变 </h1>
|
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 setIsConcurrent() ,使用方式保持不变 </h1>
|
||||||
* @param allowConcurrentLogin see note
|
* @param allowConcurrentLogin see note
|
||||||
@@ -501,5 +502,20 @@ public class SaTokenConfig implements Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 getJwtSecretkey() ,使用方式保持不变 </h1>
|
||||||
|
*/
|
||||||
|
public String getJwtSecretKey() {
|
||||||
|
return jwtSecretkey;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 setJwtSecretkey() ,使用方式保持不变 </h1>
|
||||||
|
* @return 对象自身
|
||||||
|
*/
|
||||||
|
public SaTokenConfig setJwtSecretKey(String jwtSecretKey) {
|
||||||
|
this.jwtSecretkey = jwtSecretKey;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -10,7 +10,7 @@ import java.util.Properties;
|
|||||||
/**
|
/**
|
||||||
* Sa-Token配置文件的构建工厂类
|
* Sa-Token配置文件的构建工厂类
|
||||||
* <p>
|
* <p>
|
||||||
* 只有在非IOC环境下才会用到此类
|
* 用于手动读取配置文件初始化 SaTokenConfig 对象,只有在非IOC环境下你才会用到此类
|
||||||
*
|
*
|
||||||
* @author kong
|
* @author kong
|
||||||
*
|
*
|
||||||
|
@@ -7,6 +7,12 @@ import cn.dev33.satoken.exception.SaTokenException;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sa-Token 上下文处理器 [默认实现类]
|
* Sa-Token 上下文处理器 [默认实现类]
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* 一般情况下框架会为你自动注入合适的上下文处理器,如果代码断点走到了此默认实现类,
|
||||||
|
* 说明你引入的依赖有问题或者错误的调用了Sa-Token的API, 请在[在线开发文档 > 附录 > 常见问题排查] 中按照提示进行排查
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @author kong
|
* @author kong
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@@ -6,6 +6,12 @@ import cn.dev33.satoken.context.model.SaStorage;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sa-Token 上下文处理器 [ThreadLocal版本]
|
* Sa-Token 上下文处理器 [ThreadLocal版本]
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* 使用 [ThreadLocal版本] 上下文处理器需要在全局过滤器或者拦截器内率先调用
|
||||||
|
* SaTokenContextForThreadLocalStorage.setBox(req,res, sto) 初始化上下文
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @author kong
|
* @author kong
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@@ -7,6 +7,7 @@ import cn.dev33.satoken.exception.SaTokenException;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sa-Token 上下文处理器 [ThreadLocal版本] ---- 对象存储器
|
* Sa-Token 上下文处理器 [ThreadLocal版本] ---- 对象存储器
|
||||||
|
*
|
||||||
* @author kong
|
* @author kong
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
package cn.dev33.satoken.exception;
|
package cn.dev33.satoken.exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 一个异常:代表停止路由匹配
|
* 一个异常:代表停止路由匹配,进入Controller
|
||||||
*
|
*
|
||||||
* @author kong
|
* @author kong
|
||||||
*/
|
*/
|
||||||
|
@@ -147,7 +147,7 @@ public class SaIdTemplate {
|
|||||||
* @return Token
|
* @return Token
|
||||||
*/
|
*/
|
||||||
public String createToken() {
|
public String createToken() {
|
||||||
return SaFoxUtil.getRandomString(60);
|
return SaFoxUtil.getRandomString(64);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@ public class SaIdTemplate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拼接key:Id-Token的存储key
|
* 拼接key:次级 Id-Token 的存储 key
|
||||||
* @return key
|
* @return key
|
||||||
*/
|
*/
|
||||||
public String splicingPastTokenSaveKey() {
|
public String splicingPastTokenSaveKey() {
|
||||||
|
@@ -6,6 +6,18 @@ import cn.dev33.satoken.strategy.SaStrategy;
|
|||||||
/**
|
/**
|
||||||
* 自定义 Session 工具类
|
* 自定义 Session 工具类
|
||||||
*
|
*
|
||||||
|
* <p>样例:
|
||||||
|
* <pre>
|
||||||
|
* // 在一处代码写入数据
|
||||||
|
* 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);
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
* @author kong
|
* @author kong
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@@ -43,7 +43,7 @@ public class TokenSign implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return token value
|
* @return token值
|
||||||
*/
|
*/
|
||||||
public String getValue() {
|
public String getValue() {
|
||||||
return value;
|
return value;
|
||||||
|
@@ -12,7 +12,6 @@ import cn.dev33.satoken.util.SaTokenConsts;
|
|||||||
*/
|
*/
|
||||||
public class SaLoginModel {
|
public class SaLoginModel {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 此次登录的客户端设备标识
|
* 此次登录的客户端设备标识
|
||||||
*/
|
*/
|
||||||
|
@@ -62,6 +62,15 @@ public interface SaTempInterface {
|
|||||||
return SaManager.getSaTokenDao().getObjectTimeout(key);
|
return SaManager.getSaTokenDao().getObjectTimeout(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除一个token
|
||||||
|
* @param token 指定token
|
||||||
|
*/
|
||||||
|
public default void deleteToken(String token) {
|
||||||
|
String key = splicingKeyTempToken(token);
|
||||||
|
SaManager.getSaTokenDao().deleteObject(key);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取映射关系的持久化key
|
* 获取映射关系的持久化key
|
||||||
* @param token token值
|
* @param token token值
|
||||||
@@ -74,7 +83,7 @@ public interface SaTempInterface {
|
|||||||
/**
|
/**
|
||||||
* @return jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效)
|
* @return jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效)
|
||||||
*/
|
*/
|
||||||
public default String getJwtSecretKey() {
|
public default String getJwtSecretkey() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,7 +1,5 @@
|
|||||||
package com.pj;
|
package com.pj;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckBasic;
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
@@ -15,8 +13,6 @@ import cn.dev33.satoken.SaManager;
|
|||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class SaTokenDemoApplication {
|
public class SaTokenDemoApplication {
|
||||||
|
|
||||||
@SaCheckPermission
|
|
||||||
@SaCheckBasic
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SpringApplication.run(SaTokenDemoApplication.class, args);
|
SpringApplication.run(SaTokenDemoApplication.class, args);
|
||||||
System.out.println("\n启动成功:Sa-Token配置如下:" + SaManager.getConfig());
|
System.out.println("\n启动成功:Sa-Token配置如下:" + SaManager.getConfig());
|
||||||
|
@@ -48,6 +48,9 @@ String value = SaTempUtil.parseToken(token, String.class);
|
|||||||
|
|
||||||
// 获取指定 token 的剩余有效期,单位:秒
|
// 获取指定 token 的剩余有效期,单位:秒
|
||||||
SaTempUtil.getTimeout(token);
|
SaTempUtil.getTimeout(token);
|
||||||
|
|
||||||
|
// 删除指定 token
|
||||||
|
SaTempUtil.deleteToken(token);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@@ -68,5 +71,5 @@ SaTempUtil.getTimeout(token);
|
|||||||
``` java
|
``` java
|
||||||
sa-token:
|
sa-token:
|
||||||
# sa-token-temp-jwt 模块的秘钥 (随便乱摁几个字母就行了)
|
# sa-token-temp-jwt 模块的秘钥 (随便乱摁几个字母就行了)
|
||||||
jwt-secret-key: JfdDSgfCmPsDfmsAaQwnXk
|
jwt-secretkey: JfdDSgfCmPsDfmsAaQwnXk
|
||||||
```
|
```
|
||||||
|
@@ -15,32 +15,44 @@ public class SaTempForJwt implements SaTempInterface {
|
|||||||
/**
|
/**
|
||||||
* 根据value创建一个token
|
* 根据value创建一个token
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public String createToken(Object value, long timeout) {
|
public String createToken(Object value, long timeout) {
|
||||||
String token = SaJwtUtil.createToken(value, timeout, getJwtSecretKey());
|
String token = SaJwtUtil.createToken(value, timeout, getJwtSecretkey());
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解析token获取value
|
* 解析token获取value
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public Object parseToken(String token) {
|
public Object parseToken(String token) {
|
||||||
Object value = SaJwtUtil.getValue(token, getJwtSecretKey());
|
Object value = SaJwtUtil.getValue(token, getJwtSecretkey());
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回指定token的剩余有效期,单位:秒
|
* 返回指定token的剩余有效期,单位:秒
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public long getTimeout(String token) {
|
public long getTimeout(String token) {
|
||||||
long timeout = SaJwtUtil.getTimeout(token, getJwtSecretKey());
|
long timeout = SaJwtUtil.getTimeout(token, getJwtSecretkey());
|
||||||
return timeout;
|
return timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除一个token
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void deleteToken(String token) {
|
||||||
|
throw new SaTokenException("jwt cannot delete token");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取jwt秘钥
|
* 获取jwt秘钥
|
||||||
* @return jwt秘钥
|
* @return jwt秘钥
|
||||||
*/
|
*/
|
||||||
public String getJwtSecretKey() {
|
@Override
|
||||||
|
public String getJwtSecretkey() {
|
||||||
String jwtSecretKey = SaManager.getConfig().getJwtSecretKey();
|
String jwtSecretKey = SaManager.getConfig().getJwtSecretKey();
|
||||||
if(SaFoxUtil.isEmpty(jwtSecretKey)) {
|
if(SaFoxUtil.isEmpty(jwtSecretKey)) {
|
||||||
throw new SaTokenException("请配置:jwtSecretKey");
|
throw new SaTokenException("请配置:jwtSecretKey");
|
||||||
|
Reference in New Issue
Block a user