SaTokenManager新增stpLogicMap集合,记录所有StpLogic的初始化,方便查找

This commit is contained in:
shengzhang
2021-03-20 16:51:18 +08:00
parent a122a8b083
commit 50ffda7bef
4 changed files with 125 additions and 86 deletions

View File

@@ -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;
} }
} }

View File

@@ -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
@@ -273,36 +304,19 @@ public class SaSession implements Serializable {
} }
return Integer.valueOf(String.valueOf(value)); return Integer.valueOf(String.valueOf(value));
} }
/**
* 判断一个值是否为null
* @param value 指定值
* @return 此value是否为null
*/
public boolean valueIsNull(Object value) {
return value == null || value.equals("");
}
// ----------------------- 一些操作
/** /**
* 将这个Session从持久库更新一下 * Session中取值并转化为long类型如果value为空则返回0
* @param key key
* @return 值
*/ */
public void update() { public long getLong(String key) {
SaTokenManager.getSaTokenDao().updateSession(this); Object value = getObject(key);
} if(valueIsNull(value)) {
return 0;
/** 注销会话 (注销后此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));
} }
} }

View File

@@ -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);
} }
/** /**

View File

@@ -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匹配