v1.5版本 升级

This commit is contained in:
shengzhang
2020-12-16 02:10:51 +08:00
parent 19e81b257e
commit 6e10bce575
26 changed files with 287 additions and 417 deletions

View File

@@ -14,7 +14,7 @@ public interface SaTokenAction {
/**
* 获取当前会话的 response
* @return
* @return 当前请求的response
*/
public HttpServletResponse getResponse();
@@ -22,7 +22,7 @@ public interface SaTokenAction {
* 生成一个token
* @param loginId 账号id
* @param loginKey 登录标识key
* @return
* @return 一个token
*/
public String createToken(Object loginId, String loginKey);

View File

@@ -25,20 +25,32 @@ public class NotLoginException extends RuntimeException {
/** 表示未提供token */
public static final String NOT_TOKEN = "-1";
public static final String NOT_TOKEN_MESSAGE = "未提供token";
/** 表示token无效 */
public static final String INVALID_TOKEN = "-2";
/** 表示token已被顶下线 */
public static final String BE_REPLACED = "-3";
public static final String INVALID_TOKEN_MESSAGE = "token无效";
/** 表示token已过期 */
public static final String TOKEN_TIMEOUT = "-4";
public static final String TOKEN_TIMEOUT = "-3";
public static final String TOKEN_TIMEOUT_MESSAGE = "token已过期";
/** 表示token已被顶下线 */
public static final String BE_REPLACED = "-4";
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 DEFAULT_MESSAGE = "当前会话未登录";
/**
* 代表异常token的标志集合
*/
public static final List<String> ABNORMAL_LIST = Arrays.asList(NOT_TOKEN, INVALID_TOKEN, BE_REPLACED, TOKEN_TIMEOUT);
public static final List<String> ABNORMAL_LIST = Arrays.asList(NOT_TOKEN, INVALID_TOKEN, TOKEN_TIMEOUT, BE_REPLACED, KICK_OUT);
/**
@@ -76,15 +88,47 @@ public class NotLoginException extends RuntimeException {
// this(StpUtil.stpLogic.loginKey);
// }
/**
* 创建一个
* @param loginKey login_key
* 创建一个
* @param message 异常消息
* @param loginKey loginKey
* @param type 类型
*/
public NotLoginException(String loginKey, String type) {
public NotLoginException(String message, String loginKey, String type) {
// 这里到底要不要拼接上login_key呢纠结
super("当前会话未登录");
super(message);
this.loginKey = loginKey;
this.type = type;
}
/**
* 静态方法构建一个NotLoginException
* @param loginKey loginKey
* @param type 场景类型
* @return 构建完毕的异常对象
*/
public static NotLoginException newInstance(String loginKey, String type) {
String message = null;
if(type.equals(NOT_TOKEN)) {
message = NOT_TOKEN_MESSAGE;
}
else if(type.equals(INVALID_TOKEN)) {
message = INVALID_TOKEN_MESSAGE;
}
else if(type.equals(TOKEN_TIMEOUT)) {
message = TOKEN_TIMEOUT_MESSAGE;
}
else if(type.equals(BE_REPLACED)) {
message = BE_REPLACED_MESSAGE;
}
else if(type.equals(KICK_OUT)) {
message = KICK_OUT_MESSAGE;
}
else {
message = DEFAULT_MESSAGE;
}
return new NotLoginException(message, loginKey, type);
}
}

View File

@@ -33,7 +33,7 @@ public class SaSession implements Serializable {
/**
* 构建一个 session对象
* @param id
* @param id sessionId
*/
public SaSession(String id) {
this.id = id;

View File

@@ -30,7 +30,7 @@ public class SaSessionCustomUtil {
* 获取指定key的session
* @param sessionId key
* @param isCreate 如果没有,是否新建并返回
* @return
* @return SaSession
*/
public static SaSession getSessionById(String sessionId, boolean isCreate) {
SaSession session = SaTokenManager.getDao().getSaSession(getSessionKey(sessionId));

View File

@@ -21,7 +21,7 @@ public class SpringSaToken {
/**
* 获取配置Bean
* @return
* @return .
*/
@Bean
@ConfigurationProperties(prefix="spring.sa-token")

View File

@@ -12,7 +12,7 @@ public interface StpInterface {
* 返回指定login_id所拥有的权限码集合
* @param loginId 账号id
* @param loginKey 具体的stp标识
* @return
* @return .
*/
public List<Object> getPermissionCodeList(Object loginId, String loginKey);

View File

@@ -49,6 +49,7 @@ public class StpLogic {
/**
* 随机生成一个tokenValue
* @param loginId loginId
* @return 生成的tokenValue
*/
public String randomTokenValue(Object loginId) {
@@ -100,7 +101,7 @@ public class StpLogic {
/**
* 获取指定id的tokenValue
* @param loginId .
* @return
* @return .
*/
public String getTokenValueByLoginId(Object loginId) {
return SaTokenManager.getDao().getValue(getKeyLoginId(loginId));
@@ -172,8 +173,8 @@ public class StpLogic {
if(loginId == null) {
return;
}
// 如果已被顶替或已过期那么只删除此token即可
if(loginId.equals(NotLoginException.BE_REPLACED) || loginId.equals(NotLoginException.TOKEN_TIMEOUT)) {
// 如果已过期或被顶替或被挤下线那么只删除此token即可
if(loginId.equals(NotLoginException.TOKEN_TIMEOUT) || loginId.equals(NotLoginException.BE_REPLACED) || loginId.equals(NotLoginException.KICK_OUT)) {
return;
}
// 至此已经是一个正常的loginId开始三清
@@ -181,7 +182,7 @@ public class StpLogic {
}
/**
* 指定loginId的会话注销登录踢人下线)
* 指定loginId的会话注销登录清退下线)
* @param loginId 账号id
*/
public void logoutByLoginId(Object loginId) {
@@ -195,7 +196,25 @@ public class StpLogic {
// 清除相关数据
SaTokenManager.getDao().delKey(getKeyTokenValue(tokenValue)); // 清除token-id键值对
SaTokenManager.getDao().delKey(getKeyLoginId(loginId)); // 清除id-token键值对
SaTokenManager.getDao().delKey(getKeySession(loginId)); // 清除其session
SaTokenManager.getDao().deleteSaSession(getKeySession(loginId)); // 清除其session
}
/**
* 指定loginId的会话注销登录踢人下线
* @param loginId 账号id
*/
public void kickoutByLoginId(Object loginId) {
// 获取相应tokenValue
String tokenValue = getTokenValueByLoginId(loginId);
if(tokenValue == null) {
return;
}
// 清除相关数据
SaTokenManager.getDao().updateValue(getKeyTokenValue(tokenValue), NotLoginException.KICK_OUT); // 标记:已被踢下线
SaTokenManager.getDao().delKey(getKeyLoginId(loginId)); // 清除id-token键值对
SaTokenManager.getDao().deleteSaSession(getKeySession(loginId)); // 清除其session
}
// 查询相关
@@ -224,20 +243,24 @@ public class StpLogic {
// 如果获取不到token则抛出无token
String tokenValue = getTokenValue();
if(tokenValue == null) {
throw new NotLoginException(loginKey, NotLoginException.NOT_TOKEN);
throw NotLoginException.newInstance(loginKey, NotLoginException.NOT_TOKEN);
}
// 查找此token对应loginId, 则抛出无效token
String loginId = SaTokenManager.getDao().getValue(getKeyTokenValue(tokenValue));
if(loginId == null) {
throw new NotLoginException(loginKey, NotLoginException.INVALID_TOKEN);
}
// 如果是已经被顶替下去了, 则抛出:已被顶下线
if(loginId.equals(NotLoginException.BE_REPLACED)) {
throw new NotLoginException(loginKey, NotLoginException.BE_REPLACED);
throw NotLoginException.newInstance(loginKey, NotLoginException.INVALID_TOKEN);
}
// 如果是已经过期,则抛出已经过期
if(loginId.equals(NotLoginException.TOKEN_TIMEOUT)) {
throw new NotLoginException(loginKey, NotLoginException.TOKEN_TIMEOUT);
throw NotLoginException.newInstance(loginKey, NotLoginException.TOKEN_TIMEOUT);
}
// 如果是已经被顶替下去了, 则抛出:已被顶下线
if(loginId.equals(NotLoginException.BE_REPLACED)) {
throw NotLoginException.newInstance(loginKey, NotLoginException.BE_REPLACED);
}
// 如果是已经被踢下线了, 则抛出:已被踢下线
if(loginId.equals(NotLoginException.KICK_OUT)) {
throw NotLoginException.newInstance(loginKey, NotLoginException.KICK_OUT);
}
// 至此返回loginId
return loginId;
@@ -246,7 +269,7 @@ public class StpLogic {
/**
* 获取当前会话登录id, 如果未登录,则返回默认值
* @param defaultValue .
* @return
* @return .
*/
@SuppressWarnings("unchecked")
public <T>T getLoginId(T defaultValue) {
@@ -297,7 +320,7 @@ public class StpLogic {
/**
* 获取当前会话登录id, 并转换为int
* @return
* @return .
*/
public int getLoginIdAsInt() {
// Object loginId = getLoginId();
@@ -309,7 +332,7 @@ public class StpLogic {
/**
* 获取当前会话登录id, 并转换为long
* @return
* @return .
*/
public long getLoginIdAsLong() {
// Object loginId = getLoginId();

View File

@@ -72,13 +72,21 @@ public class StpUtil {
}
/**
* 指定loginId的会话注销登录踢人下线)
* 指定loginId的会话注销登录清退下线)
* @param loginId 账号id
*/
public static void logoutByLoginId(Object loginId) {
stpLogic.logoutByLoginId(loginId);
}
/**
* 指定loginId的会话注销登录踢人下线
* @param loginId 账号id
*/
public static void kickoutByLoginId(Object loginId) {
stpLogic.kickoutByLoginId(loginId);
}
// 查询相关
/**

View File

@@ -11,7 +11,7 @@ public class SaTokenInsideUtil {
/**
* sa-token 版本号
*/
public static final String VERSION_NO = "v1.4.0";
public static final String VERSION_NO = "v1.5.1";
/**
* sa-token 开源地址