mirror of
https://gitee.com/dromara/sa-token.git
synced 2026-02-27 16:50:24 +08:00
重构API
This commit is contained in:
@@ -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("未能获取对应StpLogic,key="+ loginKey);
|
||||
throw new SaTokenException("未能获取对应StpLogic,type="+ 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时触发
|
||||
|
||||
+6
-6
@@ -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 格式化后的时间
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user