mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-10-27 02:59:02 +08:00
jwt集成新增mix模式
This commit is contained in:
@@ -0,0 +1,209 @@
|
||||
package cn.dev33.satoken.jwt;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import cn.dev33.satoken.context.SaHolder;
|
||||
import cn.dev33.satoken.dao.SaTokenDao;
|
||||
import cn.dev33.satoken.exception.ApiDisabledException;
|
||||
import cn.dev33.satoken.exception.NotLoginException;
|
||||
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||
import cn.dev33.satoken.stp.StpLogic;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
|
||||
/**
|
||||
* Sa-Token 整合 jwt -- Mix 混入
|
||||
* @author kong
|
||||
*
|
||||
*/
|
||||
public class StpLogicJwtForMix extends StpLogic {
|
||||
|
||||
/**
|
||||
* Sa-Token 整合 jwt -- Mix 混入
|
||||
*/
|
||||
public StpLogicJwtForMix() {
|
||||
super(StpUtil.TYPE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sa-Token 整合 jwt -- Mix 混入
|
||||
* @param loginType 账号体系标识
|
||||
*/
|
||||
public StpLogicJwtForMix(String loginType) {
|
||||
super(loginType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取jwt秘钥
|
||||
* @return /
|
||||
*/
|
||||
public String jwtSecretKey() {
|
||||
return getConfig().getJwtSecretKey();
|
||||
}
|
||||
|
||||
//
|
||||
// ------ 重写方法
|
||||
//
|
||||
|
||||
// ------------------- 获取token 相关 -------------------
|
||||
|
||||
/**
|
||||
* 创建一个TokenValue
|
||||
*/
|
||||
@Override
|
||||
public String createTokenValue(Object loginId, String device, long timeout) {
|
||||
return SaJwtUtil.createToken(loginType, loginId, device, timeout, jwtSecretKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前会话的Token信息
|
||||
* @return token信息
|
||||
*/
|
||||
@Override
|
||||
public SaTokenInfo getTokenInfo() {
|
||||
SaTokenInfo info = new SaTokenInfo();
|
||||
info.tokenName = getTokenName();
|
||||
info.tokenValue = getTokenValue();
|
||||
info.isLogin = isLogin();
|
||||
info.loginId = getLoginIdDefaultNull();
|
||||
info.loginType = getLoginType();
|
||||
info.tokenTimeout = getTokenTimeout();
|
||||
info.sessionTimeout = SaTokenDao.NOT_VALUE_EXPIRE;
|
||||
info.tokenSessionTimeout = SaTokenDao.NOT_VALUE_EXPIRE;
|
||||
info.tokenActivityTimeout = SaTokenDao.NOT_VALUE_EXPIRE;
|
||||
info.loginDevice = getLoginDevice();
|
||||
return info;
|
||||
}
|
||||
|
||||
// ------------------- 登录相关操作 -------------------
|
||||
|
||||
/**
|
||||
* 获取指定Token对应的账号id (不做任何特殊处理)
|
||||
*/
|
||||
@Override
|
||||
public String getLoginIdNotHandle(String tokenValue) {
|
||||
// 先验证 loginType,如果不符,则视为无效token,返回null
|
||||
String loginType = SaJwtUtil.getPayloadsNotCheck(tokenValue, jwtSecretKey()).getStr(SaJwtUtil.LOGIN_TYPE);
|
||||
if(getLoginType().equals(loginType) == false) {
|
||||
return null;
|
||||
}
|
||||
// 获取 loginId
|
||||
try {
|
||||
Object loginId = SaJwtUtil.getLoginId(tokenValue, jwtSecretKey());
|
||||
return String.valueOf(loginId);
|
||||
} catch (NotLoginException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 会话注销
|
||||
*/
|
||||
@Override
|
||||
public void logout() {
|
||||
// ...
|
||||
|
||||
// 从当前 [storage存储器] 里删除
|
||||
SaHolder.getStorage().delete(splicingKeyJustCreatedSave());
|
||||
|
||||
// 如果打开了Cookie模式,则把cookie清除掉
|
||||
if(getConfig().getIsReadCookie()){
|
||||
SaHolder.getResponse().deleteCookie(getTokenName());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* [禁用] 会话注销,根据账号id 和 设备标识
|
||||
*/
|
||||
@Override
|
||||
public void logout(Object loginId, String device) {
|
||||
throw new ApiDisabledException();
|
||||
}
|
||||
|
||||
/**
|
||||
* [禁用] 会话注销,根据指定 Token
|
||||
*/
|
||||
@Override
|
||||
public void logoutByTokenValue(String tokenValue) {
|
||||
throw new ApiDisabledException();
|
||||
}
|
||||
|
||||
/**
|
||||
* [禁用] 踢人下线,根据账号id 和 设备标识
|
||||
*/
|
||||
@Override
|
||||
public void kickout(Object loginId, String device) {
|
||||
throw new ApiDisabledException();
|
||||
}
|
||||
|
||||
/**
|
||||
* [禁用] 踢人下线,根据指定 Token
|
||||
*/
|
||||
@Override
|
||||
public void kickoutByTokenValue(String tokenValue) {
|
||||
throw new ApiDisabledException();
|
||||
}
|
||||
|
||||
/**
|
||||
* [禁用] 顶人下线,根据账号id 和 设备标识
|
||||
*/
|
||||
@Override
|
||||
public void replaced(Object loginId, String device) {
|
||||
throw new ApiDisabledException();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除 Token-Id 映射
|
||||
*/
|
||||
@Override
|
||||
public void deleteTokenToIdMapping(String tokenValue) {
|
||||
// not action
|
||||
}
|
||||
/**
|
||||
* 更改 Token 指向的 账号Id 值
|
||||
*/
|
||||
@Override
|
||||
public void updateTokenToIdMapping(String tokenValue, Object loginId) {
|
||||
// not action
|
||||
}
|
||||
/**
|
||||
* 存储 Token-Id 映射
|
||||
*/
|
||||
@Override
|
||||
public void saveTokenToIdMapping(String tokenValue, Object loginId, long timeout) {
|
||||
// not action
|
||||
}
|
||||
|
||||
// ------------------- 过期时间相关 -------------------
|
||||
|
||||
/**
|
||||
* 获取当前登录者的 token 剩余有效时间 (单位: 秒)
|
||||
*/
|
||||
@Override
|
||||
public long getTokenTimeout() {
|
||||
return SaJwtUtil.getTimeout(getTokenValue(), jwtSecretKey());
|
||||
}
|
||||
|
||||
|
||||
// ------------------- 会话管理 -------------------
|
||||
|
||||
/**
|
||||
* 根据条件查询Token
|
||||
*/
|
||||
@Override
|
||||
public List<String> searchTokenValue(String keyword, int start, int size) {
|
||||
throw new ApiDisabledException();
|
||||
}
|
||||
|
||||
|
||||
// ------------------- Bean对象代理 -------------------
|
||||
|
||||
/**
|
||||
* 返回全局配置对象的isShare属性
|
||||
* @return /
|
||||
*/
|
||||
@Override
|
||||
public boolean getConfigOfIsShare() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package cn.dev33.satoken.jwt;
|
||||
import cn.dev33.satoken.SaManager;
|
||||
import cn.dev33.satoken.context.SaHolder;
|
||||
import cn.dev33.satoken.dao.SaTokenDao;
|
||||
import cn.dev33.satoken.exception.ApiDisabledException;
|
||||
import cn.dev33.satoken.exception.NotLoginException;
|
||||
import cn.dev33.satoken.exception.SaTokenException;
|
||||
import cn.dev33.satoken.stp.SaLoginModel;
|
||||
@@ -18,12 +19,7 @@ import cn.dev33.satoken.stp.StpUtil;
|
||||
public class StpLogicJwtForStateless extends StpLogic {
|
||||
|
||||
/**
|
||||
* 异常描述
|
||||
*/
|
||||
public static final String ERROR_MESSAGE = "This API is disabled";
|
||||
|
||||
/**
|
||||
* 初始化StpLogic, 并指定账号类型
|
||||
* Sa-Token 整合 jwt -- stateless 无状态
|
||||
* @param loginType 账号体系标识
|
||||
*/
|
||||
public StpLogicJwtForStateless() {
|
||||
@@ -31,7 +27,7 @@ public class StpLogicJwtForStateless extends StpLogic {
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化StpLogic, 并指定账号类型
|
||||
* Sa-Token 整合 jwt -- stateless 无状态
|
||||
* @param loginType 账号体系标识
|
||||
*/
|
||||
public StpLogicJwtForStateless(String loginType) {
|
||||
@@ -56,8 +52,8 @@ public class StpLogicJwtForStateless extends StpLogic {
|
||||
* 创建一个TokenValue
|
||||
*/
|
||||
@Override
|
||||
public String createTokenValue(Object loginId) {
|
||||
return SaJwtUtil.createToken(loginId, jwtSecretKey());
|
||||
public String createTokenValue(Object loginId, String device, long timeout) {
|
||||
return SaJwtUtil.createToken(loginType, loginId, device, timeout, jwtSecretKey());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -94,13 +90,7 @@ public class StpLogicJwtForStateless extends StpLogic {
|
||||
loginModel.build(getConfig());
|
||||
|
||||
// ------ 2、生成一个token
|
||||
String tokenValue = SaJwtUtil.createToken(
|
||||
loginType,
|
||||
id,
|
||||
loginModel.getDeviceOrDefault(),
|
||||
loginModel.getTimeout(),
|
||||
jwtSecretKey()
|
||||
);
|
||||
String tokenValue = createTokenValue(id, loginModel.getDeviceOrDefault(), loginModel.getTimeout());
|
||||
|
||||
// 3、在当前会话写入tokenValue
|
||||
setTokenValue(tokenValue, loginModel.getCookieTimeout());
|
||||
@@ -114,7 +104,7 @@ public class StpLogicJwtForStateless extends StpLogic {
|
||||
*/
|
||||
@Override
|
||||
public String getLoginIdNotHandle(String tokenValue) {
|
||||
// 先验证 loginType,如果不符,相当于null
|
||||
// 先验证 loginType,如果不符,则视为无效token,返回null
|
||||
String loginType = SaJwtUtil.getPayloadsNotCheck(tokenValue, jwtSecretKey()).getStr(SaJwtUtil.LOGIN_TYPE);
|
||||
if(getLoginType().equals(loginType) == false) {
|
||||
return null;
|
||||
@@ -181,11 +171,11 @@ public class StpLogicJwtForStateless extends StpLogic {
|
||||
// ------------------- Bean对象代理 -------------------
|
||||
|
||||
/**
|
||||
* 返回持久化对象
|
||||
* [禁用] 返回持久化对象
|
||||
*/
|
||||
@Override
|
||||
public SaTokenDao getSaTokenDao() {
|
||||
throw new SaTokenException(ERROR_MESSAGE);
|
||||
throw new ApiDisabledException();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -4,15 +4,14 @@ import cn.dev33.satoken.stp.StpLogic;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
|
||||
/**
|
||||
* Sa-Token 整合 jwt -- Token风格
|
||||
* Sa-Token 整合 jwt -- Token-Style
|
||||
* @author kong
|
||||
*
|
||||
*/
|
||||
public class StpLogicJwtForTokenStyle extends StpLogic {
|
||||
|
||||
/**
|
||||
* 初始化StpLogic, 并指定账号类型
|
||||
* @param loginType 账号体系标识
|
||||
* Sa-Token 整合 jwt -- Token-Style
|
||||
*/
|
||||
public StpLogicJwtForTokenStyle() {
|
||||
super(StpUtil.TYPE);
|
||||
@@ -42,7 +41,7 @@ public class StpLogicJwtForTokenStyle extends StpLogic {
|
||||
* @return 生成的tokenValue
|
||||
*/
|
||||
@Override
|
||||
public String createTokenValue(Object loginId) {
|
||||
public String createTokenValue(Object loginId, String device, long timeout) {
|
||||
return SaJwtUtil.createToken(loginId, jwtSecretKey());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user