Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
shengzhang_
sa-token
提交
50ffda7b
sa-token
项目概览
shengzhang_
/
sa-token
通知
68
Star
16
Fork
4
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
sa-token
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
50ffda7b
编写于
3月 20, 2021
作者:
shengzhang_
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
`SaTokenManager`新增`stpLogicMap`集合,记录所有`StpLogic`的初始化,方便查找
上级
a122a8b0
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
123 addition
and
84 deletion
+123
-84
sa-token-core/src/main/java/cn/dev33/satoken/SaTokenManager.java
...n-core/src/main/java/cn/dev33/satoken/SaTokenManager.java
+79
-56
sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java
...ore/src/main/java/cn/dev33/satoken/session/SaSession.java
+41
-27
sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java
...ken-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java
+2
-0
sa-token-doc/doc/fun/tech-stack.md
sa-token-doc/doc/fun/tech-stack.md
+1
-1
未找到文件。
sa-token-core/src/main/java/cn/dev33/satoken/SaTokenManager.java
浏览文件 @
50ffda7b
package
cn.dev33.satoken
;
import
java.util.HashMap
;
import
java.util.Map
;
import
cn.dev33.satoken.action.SaTokenAction
;
import
cn.dev33.satoken.action.SaTokenActionDefaultImpl
;
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.stp.StpInterface
;
import
cn.dev33.satoken.stp.StpInterfaceDefaultImpl
;
import
cn.dev33.satoken.stp.StpLogic
;
import
cn.dev33.satoken.util.SaTokenInsideUtil
;
/**
...
...
@@ -21,129 +25,148 @@ import cn.dev33.satoken.util.SaTokenInsideUtil;
*/
public
class
SaTokenManager
{
/**
* 配置文件 Bean
*/
private
static
SaTokenConfig
config
;
public
static
SaTokenConfig
getConfig
()
{
if
(
config
==
null
)
{
initConfig
();
}
return
config
;
}
public
static
void
setConfig
(
SaTokenConfig
config
)
{
SaTokenManager
.
config
=
config
;
if
(
config
.
getIsV
())
{
SaTokenInsideUtil
.
printSaToken
();
}
}
public
s
ynchronized
static
void
ini
tConfig
()
{
public
s
tatic
SaTokenConfig
ge
tConfig
()
{
if
(
config
==
null
)
{
setConfig
(
SaTokenConfigFactory
.
createConfig
());
// 如果对象为空,则使用框架默认方式初始化
synchronized
(
SaTokenManager
.
class
)
{
if
(
config
==
null
)
{
setConfig
(
SaTokenConfigFactory
.
createConfig
());
}
}
}
return
config
;
}
/**
* 持久化 Bean
*/
public
static
SaTokenDao
saTokenDao
;
public
static
SaTokenDao
getSaTokenDao
()
{
if
(
saTokenDao
==
null
)
{
initSaTokenDao
();
}
return
saTokenDao
;
}
private
static
SaTokenDao
saTokenDao
;
public
static
void
setSaTokenDao
(
SaTokenDao
saTokenDao
)
{
if
(
SaTokenManager
.
saTokenDao
!=
null
&&
(
SaTokenManager
.
saTokenDao
instanceof
SaTokenDaoDefaultImpl
))
{
((
SaTokenDaoDefaultImpl
)
SaTokenManager
.
saTokenDao
).
endRefreshTimer
();
}
SaTokenManager
.
saTokenDao
=
saTokenDao
;
}
public
s
ynchronized
static
void
ini
tSaTokenDao
()
{
public
s
tatic
SaTokenDao
ge
tSaTokenDao
()
{
if
(
saTokenDao
==
null
)
{
setSaTokenDao
(
new
SaTokenDaoDefaultImpl
());
// 如果对象为空,则使用框架默认方式初始化
synchronized
(
SaTokenManager
.
class
)
{
if
(
saTokenDao
==
null
)
{
setSaTokenDao
(
new
SaTokenDaoDefaultImpl
());
}
}
}
return
saTokenDao
;
}
/**
* 权限认证 Bean
*/
public
static
StpInterface
stpInterface
;
public
static
StpInterface
getStpInterface
()
{
if
(
stpInterface
==
null
)
{
initStpInterface
();
}
return
stpInterface
;
}
private
static
StpInterface
stpInterface
;
public
static
void
setStpInterface
(
StpInterface
stpInterface
)
{
SaTokenManager
.
stpInterface
=
stpInterface
;
}
public
s
ynchronized
static
void
ini
tStpInterface
()
{
public
s
tatic
StpInterface
ge
tStpInterface
()
{
if
(
stpInterface
==
null
)
{
setStpInterface
(
new
StpInterfaceDefaultImpl
());
// 如果对象为空,则使用框架默认方式初始化
synchronized
(
SaTokenManager
.
class
)
{
if
(
stpInterface
==
null
)
{
setStpInterface
(
new
StpInterfaceDefaultImpl
());
}
}
}
return
stpInterface
;
}
/**
* 框架行为 Bean
*/
public
static
SaTokenAction
saTokenAction
;
public
static
SaTokenAction
getSaTokenAction
()
{
if
(
saTokenAction
==
null
)
{
initSaTokenAction
();
}
return
saTokenAction
;
}
private
static
SaTokenAction
saTokenAction
;
public
static
void
setSaTokenAction
(
SaTokenAction
saTokenAction
)
{
SaTokenManager
.
saTokenAction
=
saTokenAction
;
}
public
s
ynchronized
static
void
ini
tSaTokenAction
()
{
public
s
tatic
SaTokenAction
ge
tSaTokenAction
()
{
if
(
saTokenAction
==
null
)
{
setSaTokenAction
(
new
SaTokenActionDefaultImpl
());
// 如果对象为空,则使用框架默认方式初始化
synchronized
(
SaTokenManager
.
class
)
{
if
(
saTokenAction
==
null
)
{
setSaTokenAction
(
new
SaTokenActionDefaultImpl
());
}
}
}
return
saTokenAction
;
}
/**
* Cookie操作 Bean
*/
public
static
SaTokenCookie
saTokenCookie
;
public
static
SaTokenCookie
getSaTokenCookie
()
{
if
(
saTokenCookie
==
null
)
{
initSaTokenCookie
();
}
return
saTokenCookie
;
}
private
static
SaTokenCookie
saTokenCookie
;
public
static
void
setSaTokenCookie
(
SaTokenCookie
saTokenCookie
)
{
SaTokenManager
.
saTokenCookie
=
saTokenCookie
;
}
public
s
ynchronized
static
void
ini
tSaTokenCookie
()
{
public
s
tatic
SaTokenCookie
ge
tSaTokenCookie
()
{
if
(
saTokenCookie
==
null
)
{
setSaTokenCookie
(
new
SaTokenCookieDefaultImpl
());
// 如果对象为空,则使用框架默认方式初始化
synchronized
(
SaTokenManager
.
class
)
{
if
(
saTokenCookie
==
null
)
{
setSaTokenCookie
(
new
SaTokenCookieDefaultImpl
());
}
}
}
return
saTokenCookie
;
}
/**
* Servlet操作 Bean
*/
public
static
SaTokenServlet
saTokenServlet
;
private
static
SaTokenServlet
saTokenServlet
;
public
static
void
setSaTokenServlet
(
SaTokenServlet
saTokenServlet
)
{
SaTokenManager
.
saTokenServlet
=
saTokenServlet
;
}
public
static
SaTokenServlet
getSaTokenServlet
()
{
if
(
saTokenServlet
==
null
)
{
initSaTokenServlet
();
// 如果对象为空,则使用框架默认方式初始化
if
(
saTokenServlet
==
null
)
{
setSaTokenServlet
(
new
SaTokenServletDefaultImpl
());
}
}
return
saTokenServlet
;
}
public
static
void
setSaTokenServlet
(
SaTokenServlet
saTokenServlet
)
{
SaTokenManager
.
saTokenServlet
=
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
);
}
public
synchronized
static
void
initSaTokenServlet
()
{
if
(
saTokenServlet
==
null
)
{
setSaTokenServlet
(
new
SaTokenServletDefaultImpl
());
/**
* 根据 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
;
}
}
sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java
浏览文件 @
50ffda7b
...
...
@@ -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类型
* @param key key
...
...
@@ -273,36 +304,19 @@ public class SaSession implements Serializable {
}
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
()
{
SaTokenManager
.
getSaTokenDao
().
updateSession
(
this
);
}
/** 注销会话 (注销后,此session会话将不再存储服务器上) */
public
void
logout
()
{
SaTokenManager
.
getSaTokenDao
().
deleteSession
(
this
.
id
);
}
/** 当Session上的tokenSign数量为零时,注销会话 */
public
void
logoutByTokenSignCountToZero
()
{
if
(
tokenSignList
.
size
()
==
0
)
{
logout
();
public
long
getLong
(
String
key
)
{
Object
value
=
getObject
(
key
);
if
(
valueIsNull
(
value
))
{
return
0
;
}
return
Long
.
valueOf
(
String
.
valueOf
(
value
));
}
}
sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java
浏览文件 @
50ffda7b
...
...
@@ -45,6 +45,8 @@ public class StpLogic {
*/
public
StpLogic
(
String
loginKey
)
{
this
.
loginKey
=
loginKey
;
// 在 SaTokenManager 中记录下此 StpLogic,以便根据 LoginKey 进行查找此对象
SaTokenManager
.
putStpLogic
(
this
);
}
/**
...
...
sa-token-doc/doc/fun/tech-stack.md
浏览文件 @
50ffda7b
...
...
@@ -7,7 +7,7 @@
-
SpringBoot2.0、Redis、Jackson、Hutool、jwt
-
SpringBoot自定义starter、Spring包扫码 + 依赖注入、AOP注解切面、yml配置映射、拦截器
-
Java8 接口与default实现、静态方法、枚举、定时器、异常类、泛型、反射、IO流、自定义注解、Lambda表达式、函数式编程
-
package-info注释、Serializable序列化接口、
-
package-info注释、Serializable序列化接口、
synchronized锁
-
java加密算法:MD5、SHA1、SHA256、AES、RSA
-
OAuth2.0、同域单点登录、集群与分布式、路由Ant匹配
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录