重构API

This commit is contained in:
click33
2021-06-16 16:24:39 +08:00
parent 316bb063d9
commit f6f4d337c9
55 changed files with 319 additions and 265 deletions
@@ -39,7 +39,7 @@ public class SaManager {
SaFoxUtil.printSaToken();
}
// 调用一次StpUtil中的方法,保证其可以尽早的初始化 StpLogic
StpUtil.getLoginKey();
StpUtil.getLoginType();
}
public static SaTokenConfig getConfig() {
if (config == null) {
@@ -173,31 +173,31 @@ public class SaManager {
* @param stpLogic StpLogic
*/
public static void putStpLogic(StpLogic stpLogic) {
stpLogicMap.put(stpLogic.getLoginKey(), stpLogic);
stpLogicMap.put(stpLogic.getLoginType(), stpLogic);
}
/**
* 根据 LoginKey 获取对应的StpLogic,如果不存在则抛出异常
* @param loginKey 对应的LoginKey
* 根据 LoginType 获取对应的StpLogic,如果不存在则抛出异常
* @param loginType 对应的账号类型
* @return 对应的StpLogic
*/
public static StpLogic getStpLogic(String loginKey) {
// 如果key为空则返回框架内置的
if(loginKey == null || loginKey.isEmpty()) {
public static StpLogic getStpLogic(String loginType) {
// 如果type为空则返回框架内置的
if(loginType == null || loginType.isEmpty()) {
return StpUtil.stpLogic;
}
// 从SaManager中获取
StpLogic stpLogic = stpLogicMap.get(loginKey);
StpLogic stpLogic = stpLogicMap.get(loginType);
if(stpLogic == null) {
/*
* 此时有两种情况会造成 StpLogic == null
* 1. LoginKey拼写错误,请改正 (建议使用常量)
* 1. loginType拼写错误,请改正 (建议使用常量)
* 2. 自定义StpUtil尚未初始化(静态类中的属性至少一次调用后才会初始化),解决方法两种
* (1) 从main方法里调用一次
* (2) 在自定义StpUtil类加上类似 @Component 的注解让容器启动时扫描到自动初始化
*/
throw new SaTokenException("未能获取对应StpLogickey="+ loginKey);
throw new SaTokenException("未能获取对应StpLogictype="+ loginType);
}
// 返回
@@ -16,10 +16,10 @@ public interface SaTokenAction {
/**
* 根据一定的算法生成一个token
* @param loginId 账号id
* @param loginKey 账号体系key
* @param loginType 账号类型
* @return 一个token
*/
public String createToken(Object loginId, String loginKey);
public String createToken(Object loginId, String loginType);
/**
* 根据 SessionId 创建一个 Session
@@ -24,7 +24,7 @@ public class SaTokenActionDefaultImpl implements SaTokenAction {
* 根据一定的算法生成一个token
*/
@Override
public String createToken(Object loginId, String loginKey) {
public String createToken(Object loginId, String loginType) {
// 根据配置的tokenStyle生成不同风格的token
String tokenStyle = SaManager.getConfig().getTokenStyle();
// uuid
@@ -111,19 +111,19 @@ public class SaTokenActionDefaultImpl implements SaTokenAction {
// 校验 @SaCheckLogin 注解
if(target.isAnnotationPresent(SaCheckLogin.class)) {
SaCheckLogin at = target.getAnnotation(SaCheckLogin.class);
SaManager.getStpLogic(at.key()).checkByAnnotation(at);
SaManager.getStpLogic(at.type()).checkByAnnotation(at);
}
// 校验 @SaCheckRole 注解
if(target.isAnnotationPresent(SaCheckRole.class)) {
SaCheckRole at = target.getAnnotation(SaCheckRole.class);
SaManager.getStpLogic(at.key()).checkByAnnotation(at);
SaManager.getStpLogic(at.type()).checkByAnnotation(at);
}
// 校验 @SaCheckPermission 注解
if(target.isAnnotationPresent(SaCheckPermission.class)) {
SaCheckPermission at = target.getAnnotation(SaCheckPermission.class);
SaManager.getStpLogic(at.key()).checkByAnnotation(at);
SaManager.getStpLogic(at.type()).checkByAnnotation(at);
}
}
@@ -19,6 +19,6 @@ public @interface SaCheckLogin {
* 多账号体系下所属的账号体系标识
* @return see note
*/
String key() default "";
String type() default "";
}
@@ -31,6 +31,6 @@ public @interface SaCheckPermission {
* 多账号体系下所属的账号体系标识
* @return see note
*/
String key() default "";
String type() default "";
}
@@ -28,9 +28,10 @@ public @interface SaCheckRole {
SaMode mode() default SaMode.AND;
/**
* 账号体系下所属的账号体系标识
* 账号类型
* <p> 建议使用常量,避免因错误拼写带来的bug
* @return see note
*/
String key() default "";
String type() default "";
}
@@ -8,12 +8,12 @@ package cn.dev33.satoken.annotation;
public enum SaMode {
/**
* 必须具有所有的选项
* 必须具有所有的元素
*/
AND,
/**
* 只需具有其中一个选项
* 只需具有其中一个元素
*/
OR
@@ -19,9 +19,9 @@ public class DisableLoginException extends SaTokenException {
public static final String BE_MESSAGE = "此账号已被封禁";
/**
* LoginKey
* 账号类型
*/
private String loginKey;
private String loginType;
/**
* 被封禁的账号id
@@ -34,12 +34,12 @@ public class DisableLoginException extends SaTokenException {
private long disableTime;
/**
* 获得LoginKey
* 获取账号类型
*
* @return See above
* @return See Note
*/
public String getLoginKey() {
return loginKey;
public String getLoginType() {
return loginType;
}
/**
@@ -62,14 +62,14 @@ public class DisableLoginException extends SaTokenException {
/**
* 构造方法创建一个
*
* @param loginKey loginKey
* @param loginType 账号类型
* @param loginId 被封禁的账号id
* @param disableTime 封禁剩余时间,单位:秒
*/
public DisableLoginException(String loginKey, Object loginId, long disableTime) {
public DisableLoginException(String loginType, Object loginId, long disableTime) {
super(BE_MESSAGE);
this.loginId = loginId;
this.loginKey = loginKey;
this.loginType = loginType;
this.disableTime = disableTime;
}
@@ -67,38 +67,38 @@ public class NotLoginException extends SaTokenException {
/**
* loginKey
* 账号类型
*/
private String loginKey;
private String loginType;
/**
* 获得loginKey
* @return loginKey
* 获得账号类型
* @return 账号类型
*/
public String getLoginKey() {
return loginKey;
public String getLoginType() {
return loginType;
}
/**
* 构造方法创建一个
* @param message 异常消息
* @param loginKey loginKey
* @param loginType 账号类型
* @param type 类型
*/
public NotLoginException(String message, String loginKey, String type) {
public NotLoginException(String message, String loginType, String type) {
super(message);
this.loginKey = loginKey;
this.loginType = loginType;
this.type = type;
}
/**
* 静态方法构建一个NotLoginException
* @param loginKey loginKey
* @param type 场景类型
* @param loginType 账号类型
* @param type 账号类型
* @return 构建完毕的异常对象
*/
public static NotLoginException newInstance(String loginKey, String type) {
public static NotLoginException newInstance(String loginType, String type) {
String message = null;
if(NOT_TOKEN.equals(type)) {
message = NOT_TOKEN_MESSAGE;
@@ -118,7 +118,7 @@ public class NotLoginException extends SaTokenException {
else {
message = DEFAULT_MESSAGE;
}
return new NotLoginException(message, loginKey, type);
return new NotLoginException(message, loginType, type);
}
}
@@ -26,27 +26,27 @@ public class NotPermissionException extends SaTokenException {
}
/**
* loginKey
* 账号类型
*/
private String loginKey;
private String loginType;
/**
* 获得loginKey
* 获得账号类型
*
* @return loginKey
* @return 账号类型
*/
public String getLoginKey() {
return loginKey;
public String getLoginType() {
return loginType;
}
public NotPermissionException(String code) {
this(code, StpUtil.stpLogic.loginKey);
this(code, StpUtil.stpLogic.loginType);
}
public NotPermissionException(String code, String loginKey) {
public NotPermissionException(String code, String loginType) {
super("无此权限:" + code);
this.code = code;
this.loginKey = loginKey;
this.loginType = loginType;
}
}
@@ -26,27 +26,27 @@ public class NotRoleException extends SaTokenException {
}
/**
* loginKey
* 账号类型
*/
private String loginKey;
private String loginType;
/**
* 获得loginKey
* 获得账号类型
*
* @return loginKey
* @return 账号类型
*/
public String getLoginKey() {
return loginKey;
public String getLoginType() {
return loginType;
}
public NotRoleException(String role) {
this(role, StpUtil.stpLogic.loginKey);
this(role, StpUtil.stpLogic.loginType);
}
public NotRoleException(String role, String loginKey) {
public NotRoleException(String role, String loginType) {
super("无此角色:" + role);
this.role = role;
this.loginKey = loginKey;
this.loginType = loginType;
}
}
@@ -12,52 +12,52 @@ public interface SaTokenListener {
/**
* 每次登录时触发
* @param loginKey 账号类别
* @param loginType 账号类别
* @param loginId 账号id
* @param loginModel 登录参数
*/
public void doLogin(String loginKey, Object loginId, SaLoginModel loginModel);
public void doLogin(String loginType, Object loginId, SaLoginModel loginModel);
/**
* 每次注销时触发
* @param loginKey 账号类别
* @param loginType 账号类别
* @param loginId 账号id
* @param tokenValue token值
*/
public void doLogout(String loginKey, Object loginId, String tokenValue);
public void doLogout(String loginType, Object loginId, String tokenValue);
/**
* 每次被踢下线时触发
* @param loginKey 账号类别
* @param loginType 账号类别
* @param loginId 账号id
* @param tokenValue token值
* @param device 设备标识
*/
public void doLogoutByLoginId(String loginKey, Object loginId, String tokenValue, String device);
public void doLogoutByLoginId(String loginType, Object loginId, String tokenValue, String device);
/**
* 每次被顶下线时触发
* @param loginKey 账号类别
* @param loginType 账号类别
* @param loginId 账号id
* @param tokenValue token值
* @param device 设备标识
*/
public void doReplaced(String loginKey, Object loginId, String tokenValue, String device);
public void doReplaced(String loginType, Object loginId, String tokenValue, String device);
/**
* 每次被封禁时触发
* @param loginKey 账号类别
* @param loginType 账号类别
* @param loginId 账号id
* @param disableTime 封禁时长,单位: 秒
*/
public void doDisable(String loginKey, Object loginId, long disableTime);
public void doDisable(String loginType, Object loginId, long disableTime);
/**
* 每次被解封时触发
* @param loginKey 账号类别
* @param loginType 账号类别
* @param loginId 账号id
*/
public void doUntieDisable(String loginKey, Object loginId);
public void doUntieDisable(String loginType, Object loginId);
/**
* 每次创建Session时触发
@@ -17,7 +17,7 @@ public class SaTokenListenerDefaultImpl implements SaTokenListener {
* 每次登录时触发
*/
@Override
public void doLogin(String loginKey, Object loginId, SaLoginModel loginModel) {
public void doLogin(String loginType, Object loginId, SaLoginModel loginModel) {
println("账号[" + loginId + "]登录成功");
}
@@ -25,7 +25,7 @@ public class SaTokenListenerDefaultImpl implements SaTokenListener {
* 每次注销时触发
*/
@Override
public void doLogout(String loginKey, Object loginId, String tokenValue) {
public void doLogout(String loginType, Object loginId, String tokenValue) {
println("账号[" + loginId + "]注销成功");
}
@@ -33,7 +33,7 @@ public class SaTokenListenerDefaultImpl implements SaTokenListener {
* 每次被踢下线时触发
*/
@Override
public void doLogoutByLoginId(String loginKey, Object loginId, String tokenValue, String device) {
public void doLogoutByLoginId(String loginType, Object loginId, String tokenValue, String device) {
println("账号[" + loginId + "]被踢下线 (终端: " + device + ")");
}
@@ -41,7 +41,7 @@ public class SaTokenListenerDefaultImpl implements SaTokenListener {
* 每次被顶下线时触发
*/
@Override
public void doReplaced(String loginKey, Object loginId, String tokenValue, String device) {
public void doReplaced(String loginType, Object loginId, String tokenValue, String device) {
println("账号[" + loginId + "]被顶下线 (终端: " + device + ")");
}
@@ -49,7 +49,7 @@ public class SaTokenListenerDefaultImpl implements SaTokenListener {
* 每次被封禁时触发
*/
@Override
public void doDisable(String loginKey, Object loginId, long disableTime) {
public void doDisable(String loginType, Object loginId, long disableTime) {
Date date = new Date(System.currentTimeMillis() + disableTime * 1000);
println("账号[" + loginId + "]被封禁 (解封时间: " + SaFoxUtil.formatDate(date) + ")");
}
@@ -58,7 +58,7 @@ public class SaTokenListenerDefaultImpl implements SaTokenListener {
* 每次被解封时触发
*/
@Override
public void doUntieDisable(String loginKey, Object loginId) {
public void doUntieDisable(String loginType, Object loginId) {
println("账号[" + loginId + "]被解除封禁");
}
@@ -10,8 +10,8 @@ import cn.dev33.satoken.fun.IsRunFunction;
import cn.dev33.satoken.fun.SaFunction;
/**
* <h1> 本类设计已过时,未来版本可能移除此类,请及时更换为 SaRouter ,使用方式保持不变 </h1>
* 对路由匹配符相关操作的封装工具类
* <h1> 本类设计已过时,未来版本可能移除此类,请及时更换为 SaRouter ,所有方法不变 </h1>
* @author kong
*
*/
@@ -20,8 +20,8 @@ public class SaTokenInfo {
/** 此token对应的LoginId,未登录时为null */
public Object loginId;
/** LoginKey账号体系标识 */
public String loginKey;
/** 账号类型 */
public String loginType;
/** token剩余有效期 (单位: 秒) */
public long tokenTimeout;
@@ -95,17 +95,17 @@ public class SaTokenInfo {
}
/**
* @return LoginKey账号体系标识
* @return 账号类型
*/
public String getLoginKey() {
return loginKey;
public String getLoginType() {
return loginType;
}
/**
* @param loginKey LoginKey账号体系标识
* @param loginType 账号类型
*/
public void setLoginKey(String loginKey) {
this.loginKey = loginKey;
public void setLoginType(String loginType) {
this.loginType = loginType;
}
/**
@@ -184,7 +184,7 @@ public class SaTokenInfo {
@Override
public String toString() {
return "SaTokenInfo [tokenName=" + tokenName + ", tokenValue=" + tokenValue + ", isLogin=" + isLogin
+ ", loginId=" + loginId + ", loginKey=" + loginKey + ", tokenTimeout=" + tokenTimeout
+ ", loginId=" + loginId + ", loginType=" + loginType + ", tokenTimeout=" + tokenTimeout
+ ", sessionTimeout=" + sessionTimeout + ", tokenSessionTimeout=" + tokenSessionTimeout
+ ", tokenActivityTimeout=" + tokenActivityTimeout + ", loginDevice=" + loginDevice + "]";
}
@@ -13,18 +13,18 @@ public interface StpInterface {
* 返回指定 LoginId 所拥有的权限码集合
*
* @param loginId 账号id
* @param loginKey 账号体系标识
* @param loginType 账号类型
* @return 该账号id具有的权限码集合
*/
public List<String> getPermissionList(Object loginId, String loginKey);
public List<String> getPermissionList(Object loginId, String loginType);
/**
* 返回指定loginId所拥有的角色标识集合
*
* @param loginId 账号id
* @param loginKey 账号体系标识
* @param loginType 账号类型
* @return 该账号id具有的角色标识集合
*/
public List<String> getRoleList(Object loginId, String loginKey);
public List<String> getRoleList(Object loginId, String loginType);
}
@@ -13,12 +13,12 @@ import java.util.List;
public class StpInterfaceDefaultImpl implements StpInterface {
@Override
public List<String> getPermissionList(Object loginId, String loginKey) {
public List<String> getPermissionList(Object loginId, String loginType) {
return new ArrayList<String>();
}
@Override
public List<String> getRoleList(Object loginId, String loginKey) {
public List<String> getRoleList(Object loginId, String loginType) {
return new ArrayList<String>();
}
@@ -27,43 +27,41 @@ import cn.dev33.satoken.util.SaFoxUtil;
import cn.dev33.satoken.util.SaTokenConsts;
/**
* sa-token 权限验证,逻辑实现类
* <p>
* (stp = sa-token-permission 的缩写 )
* Sa-Token 权限验证,逻辑实现类
* @author kong
*/
public class StpLogic {
/**
* 持久化的key前缀,多账号认证体系时以此值区分,比如:login、user、admin
* 账号类型,多账号体系时以此值区分,比如:login、user、admin
*/
public String loginKey;
public String loginType;
/**
* 初始化StpLogic, 并指定LoginKey
* @param loginKey 账号体系标识
* 初始化StpLogic, 并指定账号类型
* @param loginType 账号体系标识
*/
public StpLogic(String loginKey) {
this.loginKey = loginKey;
// 在 SaTokenManager 中记录下此 StpLogic,以便根据 LoginKey 进行查找此对象
public StpLogic(String loginType) {
this.loginType = loginType;
// 在 SaTokenManager 中记录下此 StpLogic,以便根据 LoginType 进行查找此对象
SaManager.putStpLogic(this);
}
/**
* 获取当前StpLogin的LoginKey
* @return 当前StpLogin的loginKey
* 获取当前 StpLogic 的账号类型
* @return See Note
*/
public String getLoginKey(){
return loginKey;
public String getLoginType(){
return loginType;
}
/**
* 写入当前StpLogin的LoginKey
* @param loginKey loginKey
* 设置当前账号类型
* @param loginType loginType
* @return 对象自身
*/
public StpLogic setLoginKey(String loginKey){
this.loginKey = loginKey;
public StpLogic setLoginType(String loginType){
this.loginType = loginType;
return this;
}
@@ -84,7 +82,7 @@ public class StpLogic {
* @return 生成的tokenValue
*/
public String createTokenValue(Object loginId) {
return SaManager.getSaTokenAction().createToken(loginId, loginKey);
return SaManager.getSaTokenAction().createToken(loginId, loginType);
}
/**
@@ -166,7 +164,7 @@ public class StpLogic {
info.tokenValue = getTokenValue();
info.isLogin = isLogin();
info.loginId = getLoginIdDefaultNull();
info.loginKey = getLoginKey();
info.loginType = getLoginType();
info.tokenTimeout = getTokenTimeout();
info.sessionTimeout = getSessionTimeout();
info.tokenSessionTimeout = getTokenSessionTimeout();
@@ -184,8 +182,8 @@ public class StpLogic {
* 在当前会话上登录id
* @param loginId 登录id,建议的类型:(long | int | String
*/
public void setLoginId(Object loginId) {
setLoginId(loginId, new SaLoginModel());
public void login(Object loginId) {
login(loginId, new SaLoginModel());
}
/**
@@ -193,8 +191,8 @@ public class StpLogic {
* @param loginId 登录id,建议的类型:(long | int | String
* @param device 设备标识
*/
public void setLoginId(Object loginId, String device) {
setLoginId(loginId, new SaLoginModel().setDevice(device));
public void login(Object loginId, String device) {
login(loginId, new SaLoginModel().setDevice(device));
}
/**
@@ -202,8 +200,8 @@ public class StpLogic {
* @param loginId 登录id,建议的类型:(long | int | String
* @param isLastingCookie 是否为持久Cookie
*/
public void setLoginId(Object loginId, boolean isLastingCookie) {
setLoginId(loginId, new SaLoginModel().setIsLastingCookie(isLastingCookie));
public void login(Object loginId, boolean isLastingCookie) {
login(loginId, new SaLoginModel().setIsLastingCookie(isLastingCookie));
}
/**
@@ -211,11 +209,11 @@ public class StpLogic {
* @param loginId 登录id,建议的类型:(long | int | String
* @param loginModel 此次登录的参数Model
*/
public void setLoginId(Object loginId, SaLoginModel loginModel) {
public void login(Object loginId, SaLoginModel loginModel) {
// ------ 0、检查此账号是否已被封禁
if(isDisable(loginId)) {
throw new DisableLoginException(loginKey, loginId, getDisableTime(loginId));
throw new DisableLoginException(loginType, loginId, getDisableTime(loginId));
}
// ------ 1、获取相应对象
@@ -246,7 +244,7 @@ public class StpLogic {
// 3. 清理user-session上的token签名记录
session.removeTokenSign(tokenSign.getValue());
// $$ 通知监听器
SaManager.getSaTokenListener().doReplaced(loginKey, loginId, tokenSign.getValue(), tokenSign.getDevice());
SaManager.getSaTokenListener().doReplaced(loginType, loginId, tokenSign.getValue(), tokenSign.getDevice());
}
}
}
@@ -277,7 +275,7 @@ public class StpLogic {
setTokenValue(tokenValue, loginModel.getCookieTimeout());
// $$ 通知监听器
SaManager.getSaTokenListener().doLogin(loginKey, loginId, loginModel);
SaManager.getSaTokenListener().doLogin(loginType, loginId, loginModel);
}
/**
@@ -315,7 +313,7 @@ public class StpLogic {
SaManager.getSaTokenDao().delete(splicingKeyTokenValue(tokenValue));
// $$ 通知监听器
SaManager.getSaTokenListener().doLogout(loginKey, loginId, tokenValue);
SaManager.getSaTokenListener().doLogout(loginType, loginId, tokenValue);
// 4. 尝试清理User-Session上的token签名 (如果为null或已被标记为异常, 那么无需继续执行 )
SaSession session = getSessionByLoginId(loginId, false);
@@ -363,7 +361,7 @@ public class StpLogic {
// 4. 清理账号session上的token签名
session.removeTokenSign(tokenValue);
// $$ 通知监听器
SaManager.getSaTokenListener().doLogoutByLoginId(loginKey, loginId, tokenValue, tokenSign.getDevice());
SaManager.getSaTokenListener().doLogoutByLoginId(loginType, loginId, tokenValue, tokenSign.getDevice());
}
}
// 3. 尝试注销session
@@ -381,7 +379,7 @@ public class StpLogic {
SaManager.getSaTokenDao().set(splicingKeyDisable(loginId), DisableLoginException.BE_VALUE, disableTime);
// $$ 通知监听器
SaManager.getSaTokenListener().doDisable(loginKey, loginId, disableTime);
SaManager.getSaTokenListener().doDisable(loginType, loginId, disableTime);
}
/**
@@ -410,7 +408,7 @@ public class StpLogic {
SaManager.getSaTokenDao().delete(splicingKeyDisable(loginId));
// $$ 通知监听器
SaManager.getSaTokenListener().doUntieDisable(loginKey, loginId);
SaManager.getSaTokenListener().doUntieDisable(loginType, loginId);
}
@@ -444,24 +442,24 @@ public class StpLogic {
// 如果获取不到token,则抛出: 无token
String tokenValue = getTokenValue();
if(tokenValue == null) {
throw NotLoginException.newInstance(loginKey, NotLoginException.NOT_TOKEN);
throw NotLoginException.newInstance(loginType, NotLoginException.NOT_TOKEN);
}
// 查找此token对应loginId, 如果找不到则抛出:无效token
String loginId = getLoginIdNotHandle(tokenValue);
if(loginId == null) {
throw NotLoginException.newInstance(loginKey, NotLoginException.INVALID_TOKEN);
throw NotLoginException.newInstance(loginType, NotLoginException.INVALID_TOKEN);
}
// 如果是已经过期,则抛出已经过期
if(loginId.equals(NotLoginException.TOKEN_TIMEOUT)) {
throw NotLoginException.newInstance(loginKey, NotLoginException.TOKEN_TIMEOUT);
throw NotLoginException.newInstance(loginType, NotLoginException.TOKEN_TIMEOUT);
}
// 如果是已经被顶替下去了, 则抛出:已被顶下线
if(loginId.equals(NotLoginException.BE_REPLACED)) {
throw NotLoginException.newInstance(loginKey, NotLoginException.BE_REPLACED);
throw NotLoginException.newInstance(loginType, NotLoginException.BE_REPLACED);
}
// 如果是已经被踢下线了, 则抛出:已被踢下线
if(loginId.equals(NotLoginException.KICK_OUT)) {
throw NotLoginException.newInstance(loginKey, NotLoginException.KICK_OUT);
throw NotLoginException.newInstance(loginType, NotLoginException.KICK_OUT);
}
// 检查是否已经 [临时过期]
checkActivityTimeout(tokenValue);
@@ -744,7 +742,7 @@ public class StpLogic {
}
// -2 代表已过期,抛出异常
if(timeout == SaTokenDao.NOT_VALUE_EXPIRE) {
throw NotLoginException.newInstance(loginKey, NotLoginException.TOKEN_TIMEOUT);
throw NotLoginException.newInstance(loginType, NotLoginException.TOKEN_TIMEOUT);
}
// --- 至此,验证已通过
@@ -885,7 +883,7 @@ public class StpLogic {
* @return 是否含有指定角色标识
*/
public boolean hasRole(Object loginId, String role) {
List<String> roleList = SaManager.getStpInterface().getRoleList(loginId, loginKey);
List<String> roleList = SaManager.getStpInterface().getRoleList(loginId, loginType);
return SaManager.getSaTokenAction().hasElement(roleList, role);
// return !(roleList == null || roleList.contains(role) == false);
}
@@ -905,7 +903,7 @@ public class StpLogic {
*/
public void checkRole(String role) {
if(!hasRole(role)) {
throw new NotRoleException(role, this.loginKey);
throw new NotRoleException(role, this.loginType);
}
}
@@ -915,10 +913,10 @@ public class StpLogic {
*/
public void checkRoleAnd(String... roleArray){
Object loginId = getLoginId();
List<String> roleList = SaManager.getStpInterface().getRoleList(loginId, loginKey);
List<String> roleList = SaManager.getStpInterface().getRoleList(loginId, loginType);
for (String role : roleArray) {
if(!SaManager.getSaTokenAction().hasElement(roleList, role)) {
throw new NotRoleException(role, this.loginKey);
throw new NotRoleException(role, this.loginType);
}
}
}
@@ -929,7 +927,7 @@ public class StpLogic {
*/
public void checkRoleOr(String... roleArray){
Object loginId = getLoginId();
List<String> roleList = SaManager.getStpInterface().getRoleList(loginId, loginKey);
List<String> roleList = SaManager.getStpInterface().getRoleList(loginId, loginType);
for (String role : roleArray) {
if(SaManager.getSaTokenAction().hasElement(roleList, role)) {
// 有的话提前退出
@@ -937,7 +935,7 @@ public class StpLogic {
}
}
if(roleArray.length > 0) {
throw new NotRoleException(roleArray[0], this.loginKey);
throw new NotRoleException(roleArray[0], this.loginType);
}
}
@@ -951,7 +949,7 @@ public class StpLogic {
* @return 是否含有指定权限
*/
public boolean hasPermission(Object loginId, String permission) {
List<String> permissionList = SaManager.getStpInterface().getPermissionList(loginId, loginKey);
List<String> permissionList = SaManager.getStpInterface().getPermissionList(loginId, loginType);
return SaManager.getSaTokenAction().hasElement(permissionList, permission);
// return !(permissionList == null || permissionList.contains(permission) == false);
}
@@ -971,7 +969,7 @@ public class StpLogic {
*/
public void checkPermission(String permission) {
if(hasPermission(permission) == false) {
throw new NotPermissionException(permission, this.loginKey);
throw new NotPermissionException(permission, this.loginType);
}
}
@@ -981,10 +979,10 @@ public class StpLogic {
*/
public void checkPermissionAnd(String... permissionArray){
Object loginId = getLoginId();
List<String> permissionList = SaManager.getStpInterface().getPermissionList(loginId, loginKey);
List<String> permissionList = SaManager.getStpInterface().getPermissionList(loginId, loginType);
for (String permission : permissionArray) {
if(!SaManager.getSaTokenAction().hasElement(permissionList, permission)) {
throw new NotPermissionException(permission, this.loginKey);
throw new NotPermissionException(permission, this.loginType);
}
}
}
@@ -995,7 +993,7 @@ public class StpLogic {
*/
public void checkPermissionOr(String... permissionArray){
Object loginId = getLoginId();
List<String> permissionList = SaManager.getStpInterface().getPermissionList(loginId, loginKey);
List<String> permissionList = SaManager.getStpInterface().getPermissionList(loginId, loginType);
for (String permission : permissionArray) {
if(SaManager.getSaTokenAction().hasElement(permissionList, permission)) {
// 有的话提前退出
@@ -1003,7 +1001,7 @@ public class StpLogic {
}
}
if(permissionArray.length > 0) {
throw new NotPermissionException(permissionArray[0], this.loginKey);
throw new NotPermissionException(permissionArray[0], this.loginType);
}
}
@@ -1148,7 +1146,7 @@ public class StpLogic {
* @return key
*/
public String splicingKeyTokenValue(String tokenValue) {
return getConfig().getTokenName() + ":" + loginKey + ":token:" + tokenValue;
return getConfig().getTokenName() + ":" + loginType + ":token:" + tokenValue;
}
/**
@@ -1157,7 +1155,7 @@ public class StpLogic {
* @return key
*/
public String splicingKeySession(Object loginId) {
return getConfig().getTokenName() + ":" + loginKey + ":session:" + loginId;
return getConfig().getTokenName() + ":" + loginType + ":session:" + loginId;
}
/**
@@ -1166,7 +1164,7 @@ public class StpLogic {
* @return key
*/
public String splicingKeyTokenSession(String tokenValue) {
return getConfig().getTokenName() + ":" + loginKey + ":token-session:" + tokenValue;
return getConfig().getTokenName() + ":" + loginType + ":token-session:" + tokenValue;
}
/**
@@ -1175,7 +1173,7 @@ public class StpLogic {
* @return key
*/
public String splicingKeyLastActivityTime(String tokenValue) {
return getConfig().getTokenName() + ":" + loginKey + ":last-activity:" + tokenValue;
return getConfig().getTokenName() + ":" + loginType + ":last-activity:" + tokenValue;
}
/**
@@ -1183,7 +1181,7 @@ public class StpLogic {
* @return key
*/
public String splicingKeySwitch() {
return SaTokenConsts.SWITCH_TO_SAVE_KEY + loginKey;
return SaTokenConsts.SWITCH_TO_SAVE_KEY + loginType;
}
/**
@@ -1191,7 +1189,7 @@ public class StpLogic {
* @return key
*/
public String splicingKeyJustCreatedSave() {
return SaTokenConsts.JUST_CREATED_SAVE_KEY + loginKey;
return SaTokenConsts.JUST_CREATED_SAVE_KEY + loginType;
}
/**
@@ -1200,7 +1198,7 @@ public class StpLogic {
* @return key
*/
public String splicingKeyDisable(Object loginId) {
return getConfig().getTokenName() + ":" + loginKey + ":disable:" + loginId;
return getConfig().getTokenName() + ":" + loginType + ":disable:" + loginId;
}
// =================== Bean对象代理 ===================
@@ -6,27 +6,27 @@ import cn.dev33.satoken.fun.SaFunction;
import cn.dev33.satoken.session.SaSession;
/**
* 一个默认的实现
* Sa-Token 权限验证, 工具类
* @author kong
*/
public class StpUtil {
/**
* 账号体系标识
* 账号类型标识
*/
public static final String KEY = "login";
public static final String TYPE = "login";
/**
* 底层的 StpLogic 对象
*/
public static StpLogic stpLogic = new StpLogic(KEY);
public static StpLogic stpLogic = new StpLogic(TYPE);
/**
* 获取当前StpLogin的loginKey
* @return 当前StpLogin的loginKey
* 获取当前 StpLogic 的账号类型
* @return See Note
*/
public static String getLoginKey(){
return stpLogic.getLoginKey();
public static String getLoginType(){
return stpLogic.getLoginType();
}
@@ -72,8 +72,8 @@ public class StpUtil {
* 在当前会话上登录id
* @param loginId 登录id,建议的类型:(long | int | String
*/
public static void setLoginId(Object loginId) {
stpLogic.setLoginId(loginId);
public static void login(Object loginId) {
stpLogic.login(loginId);
}
/**
@@ -81,8 +81,8 @@ public class StpUtil {
* @param loginId 登录id,建议的类型:(long | int | String
* @param device 设备标识
*/
public static void setLoginId(Object loginId, String device) {
stpLogic.setLoginId(loginId, device);
public static void login(Object loginId, String device) {
stpLogic.login(loginId, device);
}
/**
@@ -90,8 +90,8 @@ public class StpUtil {
* @param loginId 登录id,建议的类型:(long | int | String
* @param isLastingCookie 是否为持久Cookie
*/
public static void setLoginId(Object loginId, boolean isLastingCookie) {
stpLogic.setLoginId(loginId, isLastingCookie);
public static void login(Object loginId, boolean isLastingCookie) {
stpLogic.login(loginId, isLastingCookie);
}
/**
@@ -99,8 +99,8 @@ public class StpUtil {
* @param loginId 登录id,建议的类型:(long | int | String
* @param loginModel 此次登录的参数Model
*/
public static void setLoginId(Object loginId, SaLoginModel loginModel) {
stpLogic.setLoginId(loginId, loginModel);
public static void login(Object loginId, SaLoginModel loginModel) {
stpLogic.login(loginId, loginModel);
}
/**
@@ -588,5 +588,60 @@ public class StpUtil {
stpLogic.switchTo(loginId, function);
}
// =================== 历史API,兼容旧版本 ===================
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.getLoginType() ,使用方式保持不变 </h1>
* 获取当前StpLogin的loginKey
* @return 当前StpLogin的loginKey
*/
@Deprecated
public static String getLoginKey(){
return stpLogic.getLoginType();
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
* 在当前会话上登录id
* @param loginId 登录id,建议的类型:(long | int | String
*/
@Deprecated
public static void setLoginId(Object loginId) {
stpLogic.login(loginId);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
* 在当前会话上登录id, 并指定登录设备
* @param loginId 登录id,建议的类型:(long | int | String
* @param device 设备标识
*/
@Deprecated
public static void setLoginId(Object loginId, String device) {
stpLogic.login(loginId, device);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
* 在当前会话上登录id, 并指定登录设备
* @param loginId 登录id,建议的类型:(long | int | String
* @param isLastingCookie 是否为持久Cookie
*/
@Deprecated
public static void setLoginId(Object loginId, boolean isLastingCookie) {
stpLogic.login(loginId, isLastingCookie);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.login() ,使用方式保持不变 </h1>
* 在当前会话上登录id, 并指定所有登录参数Model
* @param loginId 登录id,建议的类型:(long | int | String
* @param loginModel 此次登录的参数Model
*/
@Deprecated
public static void setLoginId(Object loginId, SaLoginModel loginModel) {
stpLogic.login(loginId, loginModel);
}
}
@@ -67,7 +67,7 @@ public class SaFoxUtil {
}
/**
* 将日期格式化
* 将日期格式化 yyyy-MM-dd HH:mm:ss
* @param date 日期
* @return 格式化后的时间
*/