v1.27.1 新增jwt集成插件

This commit is contained in:
click33
2021-10-18 22:05:26 +08:00
parent 4a91553a77
commit 6d26761fd5
30 changed files with 679 additions and 389 deletions

View File

@@ -63,7 +63,7 @@ public class SaTokenConfig implements Serializable {
private Boolean isLog = false;
/**
* jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效)
* jwt秘钥 (只有集成 jwt 模块时此参数才会生效)
*/
private String jwtSecretKey;
@@ -337,14 +337,14 @@ public class SaTokenConfig implements Serializable {
}
/**
* @return jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效)
* @return jwt秘钥 (只有集成 jwt 模块时此参数才会生效)
*/
public String getJwtSecretKey() {
return jwtSecretKey;
}
/**
* @param jwtSecretKey jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效)
* @param jwtSecretKey jwt秘钥 (只有集成 jwt 模块时此参数才会生效)
* @return 对象自身
*/
public SaTokenConfig setJwtSecretKey(String jwtSecretKey) {

View File

@@ -3,6 +3,8 @@ package cn.dev33.satoken.exception;
import java.util.Arrays;
import java.util.List;
import cn.dev33.satoken.util.SaFoxUtil;
/**
* 一个异常:代表会话未能通过登录认证
* @author kong
@@ -24,23 +26,23 @@ public class NotLoginException extends SaTokenException {
/** 表示未提供token */
public static final String NOT_TOKEN = "-1";
public static final String NOT_TOKEN_MESSAGE = "未提供token";
public static final String NOT_TOKEN_MESSAGE = "未提供Token";
/** 表示token无效 */
public static final String INVALID_TOKEN = "-2";
public static final String INVALID_TOKEN_MESSAGE = "token无效";
public static final String INVALID_TOKEN_MESSAGE = "Token无效";
/** 表示token已过期 */
public static final String TOKEN_TIMEOUT = "-3";
public static final String TOKEN_TIMEOUT_MESSAGE = "token已过期";
public static final String TOKEN_TIMEOUT_MESSAGE = "Token已过期";
/** 表示token已被顶下线 */
public static final String BE_REPLACED = "-4";
public static final String BE_REPLACED_MESSAGE = "token已被顶下线";
public static final String BE_REPLACED_MESSAGE = "Token已被顶下线";
/** 表示token已被踢下线 */
public static final String KICK_OUT = "-5";
public static final String KICK_OUT_MESSAGE = "token已被踢下线";
public static final String KICK_OUT_MESSAGE = "Token已被踢下线";
/** 默认的提示语 */
public static final String DEFAULT_MESSAGE = "当前会话未登录";
@@ -99,6 +101,17 @@ public class NotLoginException extends SaTokenException {
* @return 构建完毕的异常对象
*/
public static NotLoginException newInstance(String loginType, String type) {
return newInstance(loginType, type, null);
}
/**
* 静态方法构建一个NotLoginException
* @param loginType 账号类型
* @param type 账号类型
* @param token 引起异常的Token值
* @return 构建完毕的异常对象
*/
public static NotLoginException newInstance(String loginType, String type, String token) {
String message = null;
if(NOT_TOKEN.equals(type)) {
message = NOT_TOKEN_MESSAGE;
@@ -118,6 +131,9 @@ public class NotLoginException extends SaTokenException {
else {
message = DEFAULT_MESSAGE;
}
if(SaFoxUtil.isEmpty(token) == false) {
message = message + "" + token;
}
return new NotLoginException(message, loginType, type);
}

View File

@@ -504,19 +504,19 @@ public class StpLogic {
// 查找此token对应loginId, 如果找不到则抛出无效token
String loginId = getLoginIdNotHandle(tokenValue);
if(loginId == null) {
throw NotLoginException.newInstance(loginType, NotLoginException.INVALID_TOKEN);
throw NotLoginException.newInstance(loginType, NotLoginException.INVALID_TOKEN, tokenValue);
}
// 如果是已经过期,则抛出已经过期
if(loginId.equals(NotLoginException.TOKEN_TIMEOUT)) {
throw NotLoginException.newInstance(loginType, NotLoginException.TOKEN_TIMEOUT);
throw NotLoginException.newInstance(loginType, NotLoginException.TOKEN_TIMEOUT, tokenValue);
}
// 如果是已经被顶替下去了, 则抛出:已被顶下线
if(loginId.equals(NotLoginException.BE_REPLACED)) {
throw NotLoginException.newInstance(loginType, NotLoginException.BE_REPLACED);
throw NotLoginException.newInstance(loginType, NotLoginException.BE_REPLACED, tokenValue);
}
// 如果是已经被踢下线了, 则抛出:已被踢下线
if(loginId.equals(NotLoginException.KICK_OUT)) {
throw NotLoginException.newInstance(loginType, NotLoginException.KICK_OUT);
throw NotLoginException.newInstance(loginType, NotLoginException.KICK_OUT, tokenValue);
}
// 检查是否已经 [临时过期]
checkActivityTimeout(tokenValue);
@@ -623,7 +623,7 @@ public class StpLogic {
* @return 账号id
*/
public String getLoginIdNotHandle(String tokenValue) {
return SaManager.getSaTokenDao().get(splicingKeyTokenValue(tokenValue));
return getSaTokenDao().get(splicingKeyTokenValue(tokenValue));
}
// ---- 其它操作
@@ -640,7 +640,7 @@ public class StpLogic {
* @param tokenValue token值
*/
public void deleteTokenToIdMapping(String tokenValue) {
SaManager.getSaTokenDao().delete(splicingKeyTokenValue(tokenValue));
getSaTokenDao().delete(splicingKeyTokenValue(tokenValue));
}
/**
* 更改 Token 指向的 账号Id 值
@@ -649,7 +649,7 @@ public class StpLogic {
*/
public void updateTokenToIdMapping(String tokenValue, Object loginId) {
SaTokenException.throwBy(SaFoxUtil.isEmpty(loginId), "LoginId 不能为空");
SaManager.getSaTokenDao().update(splicingKeyTokenValue(tokenValue), loginId.toString());
getSaTokenDao().update(splicingKeyTokenValue(tokenValue), loginId.toString());
}
/**
* 存储 Token-Id 映射
@@ -658,7 +658,7 @@ public class StpLogic {
* @param timeout 会话有效期 (单位: 秒)
*/
public void saveTokenToIdMapping(String tokenValue, Object loginId, long timeout) {
SaManager.getSaTokenDao().set(splicingKeyTokenValue(tokenValue), String.valueOf(loginId), timeout);
getSaTokenDao().set(splicingKeyTokenValue(tokenValue), String.valueOf(loginId), timeout);
}
@@ -672,10 +672,10 @@ public class StpLogic {
* @return Session对象
*/
public SaSession getSessionBySessionId(String sessionId, boolean isCreate) {
SaSession session = SaManager.getSaTokenDao().getSession(sessionId);
SaSession session = getSaTokenDao().getSession(sessionId);
if(session == null && isCreate) {
session = SaStrategy.me.createSession.apply(sessionId);
SaManager.getSaTokenDao().setSession(session, getConfig().getTimeout());
getSaTokenDao().setSession(session, getConfig().getTimeout());
}
return session;
}
@@ -786,10 +786,10 @@ public class StpLogic {
* @param tokenValue token值
*/
public void deleteTokenSession(String tokenValue) {
SaManager.getSaTokenDao().delete(splicingKeyTokenSession(tokenValue));
getSaTokenDao().delete(splicingKeyTokenSession(tokenValue));
}
// ------------------- [临时期] 验证相关 -------------------
// ------------------- [临时有效期] 验证相关 -------------------
/**
* 写入指定token的 [最后操作时间] 为当前时间戳
@@ -801,7 +801,7 @@ public class StpLogic {
return;
}
// 将[最后操作时间]标记为当前时间戳
SaManager.getSaTokenDao().set(splicingKeyLastActivityTime(tokenValue), String.valueOf(System.currentTimeMillis()), getConfig().getTimeout());
getSaTokenDao().set(splicingKeyLastActivityTime(tokenValue), String.valueOf(System.currentTimeMillis()), getConfig().getTimeout());
}
/**
@@ -814,7 +814,7 @@ public class StpLogic {
return;
}
// 删除[最后操作时间]
SaManager.getSaTokenDao().delete(splicingKeyLastActivityTime(tokenValue));
getSaTokenDao().delete(splicingKeyLastActivityTime(tokenValue));
// 清除标记
SaHolder.getStorage().delete(SaTokenConsts.TOKEN_ACTIVITY_TIMEOUT_CHECKED_KEY);
}
@@ -842,7 +842,7 @@ public class StpLogic {
}
// -2 代表已过期,抛出异常
if(timeout == SaTokenDao.NOT_VALUE_EXPIRE) {
throw NotLoginException.newInstance(loginType, NotLoginException.TOKEN_TIMEOUT);
throw NotLoginException.newInstance(loginType, NotLoginException.TOKEN_TIMEOUT, tokenValue);
}
// --- 至此,验证已通过
@@ -866,7 +866,7 @@ public class StpLogic {
if(tokenValue == null || getConfig().getActivityTimeout() == SaTokenDao.NEVER_EXPIRE) {
return;
}
SaManager.getSaTokenDao().update(splicingKeyLastActivityTime(tokenValue), String.valueOf(System.currentTimeMillis()));
getSaTokenDao().update(splicingKeyLastActivityTime(tokenValue), String.valueOf(System.currentTimeMillis()));
}
/**
@@ -886,7 +886,7 @@ public class StpLogic {
* @return token剩余有效时间
*/
public long getTokenTimeout() {
return SaManager.getSaTokenDao().getTimeout(splicingKeyTokenValue(getTokenValue()));
return getSaTokenDao().getTimeout(splicingKeyTokenValue(getTokenValue()));
}
/**
@@ -895,7 +895,7 @@ public class StpLogic {
* @return token剩余有效时间
*/
public long getTokenTimeoutByLoginId(Object loginId) {
return SaManager.getSaTokenDao().getTimeout(splicingKeyTokenValue(getTokenValueByLoginId(loginId)));
return getSaTokenDao().getTimeout(splicingKeyTokenValue(getTokenValueByLoginId(loginId)));
}
/**
@@ -912,7 +912,7 @@ public class StpLogic {
* @return token剩余有效时间
*/
public long getSessionTimeoutByLoginId(Object loginId) {
return SaManager.getSaTokenDao().getSessionTimeout(splicingKeySession(loginId));
return getSaTokenDao().getSessionTimeout(splicingKeySession(loginId));
}
/**
@@ -929,7 +929,7 @@ public class StpLogic {
* @return token剩余有效时间
*/
public long getTokenSessionTimeoutByTokenValue(String tokenValue) {
return SaManager.getSaTokenDao().getSessionTimeout(splicingKeyTokenSession(tokenValue));
return getSaTokenDao().getSessionTimeout(splicingKeyTokenSession(tokenValue));
}
/**
@@ -957,7 +957,7 @@ public class StpLogic {
// ------ 开始查询
// 获取相关数据
String keyLastActivityTime = splicingKeyLastActivityTime(tokenValue);
String lastActivityTimeString = SaManager.getSaTokenDao().get(keyLastActivityTime);
String lastActivityTimeString = getSaTokenDao().get(keyLastActivityTime);
// 查不到,返回-2
if(lastActivityTimeString == null) {
return SaTokenDao.NOT_VALUE_EXPIRE;
@@ -1299,7 +1299,7 @@ public class StpLogic {
* @return token集合
*/
public List<String> searchTokenValue(String keyword, int start, int size) {
return SaManager.getSaTokenDao().searchData(splicingKeyTokenValue(""), keyword, start, size);
return getSaTokenDao().searchData(splicingKeyTokenValue(""), keyword, start, size);
}
/**
@@ -1310,7 +1310,7 @@ public class StpLogic {
* @return sessionId集合
*/
public List<String> searchSessionId(String keyword, int start, int size) {
return SaManager.getSaTokenDao().searchData(splicingKeySession(""), keyword, start, size);
return getSaTokenDao().searchData(splicingKeySession(""), keyword, start, size);
}
/**
@@ -1321,7 +1321,7 @@ public class StpLogic {
* @return sessionId集合
*/
public List<String> searchTokenSessionId(String keyword, int start, int size) {
return SaManager.getSaTokenDao().searchData(splicingKeyTokenSession(""), keyword, start, size);
return getSaTokenDao().searchData(splicingKeyTokenSession(""), keyword, start, size);
}
@@ -1394,7 +1394,7 @@ public class StpLogic {
*/
public void disable(Object loginId, long disableTime) {
// 标注为已被封禁
SaManager.getSaTokenDao().set(splicingKeyDisable(loginId), DisableLoginException.BE_VALUE, disableTime);
getSaTokenDao().set(splicingKeyDisable(loginId), DisableLoginException.BE_VALUE, disableTime);
// $$ 通知监听器
SaManager.getSaTokenListener().doDisable(loginType, loginId, disableTime);
@@ -1406,7 +1406,7 @@ public class StpLogic {
* @return see note
*/
public boolean isDisable(Object loginId) {
return SaManager.getSaTokenDao().get(splicingKeyDisable(loginId)) != null;
return getSaTokenDao().get(splicingKeyDisable(loginId)) != null;
}
/**
@@ -1415,7 +1415,7 @@ public class StpLogic {
* @return see note
*/
public long getDisableTime(Object loginId) {
return SaManager.getSaTokenDao().getTimeout(splicingKeyDisable(loginId));
return getSaTokenDao().getTimeout(splicingKeyDisable(loginId));
}
/**
@@ -1423,7 +1423,7 @@ public class StpLogic {
* @param loginId 账号id
*/
public void untieDisable(Object loginId) {
SaManager.getSaTokenDao().delete(splicingKeyDisable(loginId));
getSaTokenDao().delete(splicingKeyDisable(loginId));
// $$ 通知监听器
SaManager.getSaTokenListener().doUntieDisable(loginType, loginId);
@@ -1607,13 +1607,21 @@ public class StpLogic {
// ------------------- Bean对象代理 -------------------
/**
* 返回配置对象
* @return 配置对象
* 返回全局配置对象
* @return /
*/
public SaTokenConfig getConfig() {
// 为什么再次代理一层? 为某些极端业务场景下[需要不同StpLogic不同配置]提供便利
return SaManager.getConfig();
}
/**
* 返回持久化对象
* @return /
*/
public SaTokenDao getSaTokenDao() {
return SaManager.getSaTokenDao();
}
/**
* 判断:集合中是否包含指定元素(模糊匹配)
@@ -1628,7 +1636,7 @@ public class StpLogic {
// ------------------- 历史API兼容旧版本 -------------------
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.kickout() ,使用方式保持不变 </h1>
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.kickout(id) ,使用方式保持不变 </h1>
*
* 会话注销根据账号id (踢人下线)
* <p> 当对方再次访问系统时会抛出NotLoginException异常场景值=-2
@@ -1639,7 +1647,7 @@ public class StpLogic {
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.kickout() ,使用方式保持不变 </h1>
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.kickout(id) ,使用方式保持不变 </h1>
*
* 会话注销根据账号id and 设备标识 (踢人下线)
* <p> 当对方再次访问系统时会抛出NotLoginException异常场景值=-2 </p>

View File

@@ -340,7 +340,7 @@ public class StpUtil {
}
// =================== [临时期] 验证相关 ===================
// =================== [临时有效期] 验证相关 ===================
/**
* 检查当前token 是否已经[临时过期],如果已经过期则抛出异常