mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-10-21 02:57:23 +08:00
SaTokenManager
新增stpLogicMap
集合,记录所有StpLogic
的初始化,方便查找
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
package cn.dev33.satoken;
|
package cn.dev33.satoken;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import cn.dev33.satoken.action.SaTokenAction;
|
import cn.dev33.satoken.action.SaTokenAction;
|
||||||
import cn.dev33.satoken.action.SaTokenActionDefaultImpl;
|
import cn.dev33.satoken.action.SaTokenActionDefaultImpl;
|
||||||
import cn.dev33.satoken.config.SaTokenConfig;
|
import cn.dev33.satoken.config.SaTokenConfig;
|
||||||
@@ -12,6 +15,7 @@ import cn.dev33.satoken.servlet.SaTokenServlet;
|
|||||||
import cn.dev33.satoken.servlet.SaTokenServletDefaultImpl;
|
import cn.dev33.satoken.servlet.SaTokenServletDefaultImpl;
|
||||||
import cn.dev33.satoken.stp.StpInterface;
|
import cn.dev33.satoken.stp.StpInterface;
|
||||||
import cn.dev33.satoken.stp.StpInterfaceDefaultImpl;
|
import cn.dev33.satoken.stp.StpInterfaceDefaultImpl;
|
||||||
|
import cn.dev33.satoken.stp.StpLogic;
|
||||||
import cn.dev33.satoken.util.SaTokenInsideUtil;
|
import cn.dev33.satoken.util.SaTokenInsideUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -21,129 +25,148 @@ import cn.dev33.satoken.util.SaTokenInsideUtil;
|
|||||||
*/
|
*/
|
||||||
public class SaTokenManager {
|
public class SaTokenManager {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 配置文件 Bean
|
* 配置文件 Bean
|
||||||
*/
|
*/
|
||||||
private static SaTokenConfig config;
|
private static SaTokenConfig config;
|
||||||
public static SaTokenConfig getConfig() {
|
|
||||||
if (config == null) {
|
|
||||||
initConfig();
|
|
||||||
}
|
|
||||||
return config;
|
|
||||||
}
|
|
||||||
public static void setConfig(SaTokenConfig config) {
|
public static void setConfig(SaTokenConfig config) {
|
||||||
SaTokenManager.config = config;
|
SaTokenManager.config = config;
|
||||||
if(config.getIsV()) {
|
if(config.getIsV()) {
|
||||||
SaTokenInsideUtil.printSaToken();
|
SaTokenInsideUtil.printSaToken();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public synchronized static void initConfig() {
|
public static SaTokenConfig getConfig() {
|
||||||
if (config == null) {
|
if (config == null) {
|
||||||
setConfig(SaTokenConfigFactory.createConfig());
|
// 如果对象为空,则使用框架默认方式初始化
|
||||||
|
synchronized (SaTokenManager.class) {
|
||||||
|
if (config == null) {
|
||||||
|
setConfig(SaTokenConfigFactory.createConfig());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 持久化 Bean
|
* 持久化 Bean
|
||||||
*/
|
*/
|
||||||
public static SaTokenDao saTokenDao;
|
private static SaTokenDao saTokenDao;
|
||||||
public static SaTokenDao getSaTokenDao() {
|
|
||||||
if (saTokenDao == null) {
|
|
||||||
initSaTokenDao();
|
|
||||||
}
|
|
||||||
return saTokenDao;
|
|
||||||
}
|
|
||||||
public static void setSaTokenDao(SaTokenDao saTokenDao) {
|
public static void setSaTokenDao(SaTokenDao saTokenDao) {
|
||||||
if(SaTokenManager.saTokenDao != null && (SaTokenManager.saTokenDao instanceof SaTokenDaoDefaultImpl)) {
|
if(SaTokenManager.saTokenDao != null && (SaTokenManager.saTokenDao instanceof SaTokenDaoDefaultImpl)) {
|
||||||
((SaTokenDaoDefaultImpl)SaTokenManager.saTokenDao).endRefreshTimer();
|
((SaTokenDaoDefaultImpl)SaTokenManager.saTokenDao).endRefreshTimer();
|
||||||
}
|
}
|
||||||
SaTokenManager.saTokenDao = saTokenDao;
|
SaTokenManager.saTokenDao = saTokenDao;
|
||||||
}
|
}
|
||||||
public synchronized static void initSaTokenDao() {
|
public static SaTokenDao getSaTokenDao() {
|
||||||
if (saTokenDao == null) {
|
if (saTokenDao == null) {
|
||||||
setSaTokenDao(new SaTokenDaoDefaultImpl());
|
// 如果对象为空,则使用框架默认方式初始化
|
||||||
|
synchronized (SaTokenManager.class) {
|
||||||
|
if (saTokenDao == null) {
|
||||||
|
setSaTokenDao(new SaTokenDaoDefaultImpl());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return saTokenDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 权限认证 Bean
|
* 权限认证 Bean
|
||||||
*/
|
*/
|
||||||
public static StpInterface stpInterface;
|
private static StpInterface stpInterface;
|
||||||
public static StpInterface getStpInterface() {
|
|
||||||
if (stpInterface == null) {
|
|
||||||
initStpInterface();
|
|
||||||
}
|
|
||||||
return stpInterface;
|
|
||||||
}
|
|
||||||
public static void setStpInterface(StpInterface stpInterface) {
|
public static void setStpInterface(StpInterface stpInterface) {
|
||||||
SaTokenManager.stpInterface = stpInterface;
|
SaTokenManager.stpInterface = stpInterface;
|
||||||
}
|
}
|
||||||
public synchronized static void initStpInterface() {
|
public static StpInterface getStpInterface() {
|
||||||
if (stpInterface == null) {
|
if (stpInterface == null) {
|
||||||
setStpInterface(new StpInterfaceDefaultImpl());
|
// 如果对象为空,则使用框架默认方式初始化
|
||||||
|
synchronized (SaTokenManager.class) {
|
||||||
|
if (stpInterface == null) {
|
||||||
|
setStpInterface(new StpInterfaceDefaultImpl());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return stpInterface;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 框架行为 Bean
|
* 框架行为 Bean
|
||||||
*/
|
*/
|
||||||
public static SaTokenAction saTokenAction;
|
private static SaTokenAction saTokenAction;
|
||||||
public static SaTokenAction getSaTokenAction() {
|
|
||||||
if (saTokenAction == null) {
|
|
||||||
initSaTokenAction();
|
|
||||||
}
|
|
||||||
return saTokenAction;
|
|
||||||
}
|
|
||||||
public static void setSaTokenAction(SaTokenAction saTokenAction) {
|
public static void setSaTokenAction(SaTokenAction saTokenAction) {
|
||||||
SaTokenManager.saTokenAction = saTokenAction;
|
SaTokenManager.saTokenAction = saTokenAction;
|
||||||
}
|
}
|
||||||
public synchronized static void initSaTokenAction() {
|
public static SaTokenAction getSaTokenAction() {
|
||||||
if (saTokenAction == null) {
|
if (saTokenAction == null) {
|
||||||
setSaTokenAction(new SaTokenActionDefaultImpl());
|
// 如果对象为空,则使用框架默认方式初始化
|
||||||
|
synchronized (SaTokenManager.class) {
|
||||||
|
if (saTokenAction == null) {
|
||||||
|
setSaTokenAction(new SaTokenActionDefaultImpl());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return saTokenAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cookie操作 Bean
|
* Cookie操作 Bean
|
||||||
*/
|
*/
|
||||||
public static SaTokenCookie saTokenCookie;
|
private static SaTokenCookie saTokenCookie;
|
||||||
public static SaTokenCookie getSaTokenCookie() {
|
|
||||||
if (saTokenCookie == null) {
|
|
||||||
initSaTokenCookie();
|
|
||||||
}
|
|
||||||
return saTokenCookie;
|
|
||||||
}
|
|
||||||
public static void setSaTokenCookie(SaTokenCookie saTokenCookie) {
|
public static void setSaTokenCookie(SaTokenCookie saTokenCookie) {
|
||||||
SaTokenManager.saTokenCookie = saTokenCookie;
|
SaTokenManager.saTokenCookie = saTokenCookie;
|
||||||
}
|
}
|
||||||
public synchronized static void initSaTokenCookie() {
|
public static SaTokenCookie getSaTokenCookie() {
|
||||||
if (saTokenCookie == null) {
|
if (saTokenCookie == null) {
|
||||||
setSaTokenCookie(new SaTokenCookieDefaultImpl());
|
// 如果对象为空,则使用框架默认方式初始化
|
||||||
|
synchronized (SaTokenManager.class) {
|
||||||
|
if (saTokenCookie == null) {
|
||||||
|
setSaTokenCookie(new SaTokenCookieDefaultImpl());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return saTokenCookie;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Servlet操作 Bean
|
* Servlet操作 Bean
|
||||||
*/
|
*/
|
||||||
public static SaTokenServlet saTokenServlet;
|
private static SaTokenServlet saTokenServlet;
|
||||||
public static SaTokenServlet getSaTokenServlet() {
|
|
||||||
if (saTokenServlet == null) {
|
|
||||||
initSaTokenServlet();
|
|
||||||
}
|
|
||||||
return saTokenServlet;
|
|
||||||
}
|
|
||||||
public static void setSaTokenServlet(SaTokenServlet saTokenServlet) {
|
public static void setSaTokenServlet(SaTokenServlet saTokenServlet) {
|
||||||
SaTokenManager.saTokenServlet = saTokenServlet;
|
SaTokenManager.saTokenServlet = saTokenServlet;
|
||||||
}
|
}
|
||||||
public synchronized static void initSaTokenServlet() {
|
public static SaTokenServlet getSaTokenServlet() {
|
||||||
if (saTokenServlet == null) {
|
if (saTokenServlet == null) {
|
||||||
setSaTokenServlet(new SaTokenServletDefaultImpl());
|
// 如果对象为空,则使用框架默认方式初始化
|
||||||
|
if (saTokenServlet == null) {
|
||||||
|
setSaTokenServlet(new SaTokenServletDefaultImpl());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return saTokenServlet;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* StpLogic集合, 记录框架所有成功初始化的StpLogic
|
||||||
|
*/
|
||||||
|
public static Map<String, StpLogic> stpLogicMap = new HashMap<String, StpLogic>();
|
||||||
|
/**
|
||||||
|
* 向集合中 put 一个 StpLogic
|
||||||
|
* @param stpLogic
|
||||||
|
*/
|
||||||
|
public static void putStpLogic(StpLogic stpLogic) {
|
||||||
|
stpLogicMap.put(stpLogic.getLoginKey(), stpLogic);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 根据 LoginKey 获取对应的StpLogic,如果不存在则返回null
|
||||||
|
* @param loginKey 对应的LoginKey
|
||||||
|
* @return 对应的StpLogic
|
||||||
|
*/
|
||||||
|
public static StpLogic getStpLogic(String loginKey) {
|
||||||
|
for (String key : stpLogicMap.keySet()) {
|
||||||
|
if(key.equals(loginKey)) {
|
||||||
|
return stpLogicMap.get(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -237,8 +237,39 @@ public class SaSession implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------- 一些操作
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将这个Session从持久库更新一下
|
||||||
|
*/
|
||||||
|
public void update() {
|
||||||
|
SaTokenManager.getSaTokenDao().updateSession(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 注销会话 (注销后,此session会话将不再存储服务器上) */
|
||||||
|
public void logout() {
|
||||||
|
SaTokenManager.getSaTokenDao().deleteSession(this.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 当Session上的tokenSign数量为零时,注销会话 */
|
||||||
|
public void logoutByTokenSignCountToZero() {
|
||||||
|
if (tokenSignList.size() == 0) {
|
||||||
|
logout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ----------------------- 存取值 (类型转换)
|
// ----------------------- 存取值 (类型转换)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断一个值是否为null
|
||||||
|
* @param value 指定值
|
||||||
|
* @return 此value是否为null
|
||||||
|
*/
|
||||||
|
public boolean valueIsNull(Object value) {
|
||||||
|
return value == null || value.equals("");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从Session中取值,并转化为Object类型
|
* 从Session中取值,并转化为Object类型
|
||||||
* @param key key
|
* @param key key
|
||||||
@@ -275,34 +306,17 @@ public class SaSession implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断一个值是否为null
|
* 从Session中取值,并转化为long类型,如果value为空,则返回0
|
||||||
* @param value 指定值
|
* @param key key
|
||||||
* @return 此value是否为null
|
* @return 值
|
||||||
*/
|
*/
|
||||||
public boolean valueIsNull(Object value) {
|
public long getLong(String key) {
|
||||||
return value == null || value.equals("");
|
Object value = getObject(key);
|
||||||
}
|
if(valueIsNull(value)) {
|
||||||
|
return 0;
|
||||||
|
|
||||||
// ----------------------- 一些操作
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将这个Session从持久库更新一下
|
|
||||||
*/
|
|
||||||
public void update() {
|
|
||||||
SaTokenManager.getSaTokenDao().updateSession(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 注销会话 (注销后,此session会话将不再存储服务器上) */
|
|
||||||
public void logout() {
|
|
||||||
SaTokenManager.getSaTokenDao().deleteSession(this.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 当Session上的tokenSign数量为零时,注销会话 */
|
|
||||||
public void logoutByTokenSignCountToZero() {
|
|
||||||
if (tokenSignList.size() == 0) {
|
|
||||||
logout();
|
|
||||||
}
|
}
|
||||||
|
return Long.valueOf(String.valueOf(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -45,6 +45,8 @@ public class StpLogic {
|
|||||||
*/
|
*/
|
||||||
public StpLogic(String loginKey) {
|
public StpLogic(String loginKey) {
|
||||||
this.loginKey = loginKey;
|
this.loginKey = loginKey;
|
||||||
|
// 在 SaTokenManager 中记录下此 StpLogic,以便根据 LoginKey 进行查找此对象
|
||||||
|
SaTokenManager.putStpLogic(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
- SpringBoot2.0、Redis、Jackson、Hutool、jwt
|
- SpringBoot2.0、Redis、Jackson、Hutool、jwt
|
||||||
- SpringBoot自定义starter、Spring包扫码 + 依赖注入、AOP注解切面、yml配置映射、拦截器
|
- SpringBoot自定义starter、Spring包扫码 + 依赖注入、AOP注解切面、yml配置映射、拦截器
|
||||||
- Java8 接口与default实现、静态方法、枚举、定时器、异常类、泛型、反射、IO流、自定义注解、Lambda表达式、函数式编程
|
- Java8 接口与default实现、静态方法、枚举、定时器、异常类、泛型、反射、IO流、自定义注解、Lambda表达式、函数式编程
|
||||||
- package-info注释、Serializable序列化接口、
|
- package-info注释、Serializable序列化接口、synchronized锁
|
||||||
- java加密算法:MD5、SHA1、SHA256、AES、RSA
|
- java加密算法:MD5、SHA1、SHA256、AES、RSA
|
||||||
- OAuth2.0、同域单点登录、集群与分布式、路由Ant匹配
|
- OAuth2.0、同域单点登录、集群与分布式、路由Ant匹配
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user