Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
shengzhang_
sa-token
提交
d1d25f4d
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,体验更适合开发者的 AI 搜索 >>
提交
d1d25f4d
编写于
1月 13, 2021
作者:
shengzhang_
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增SaRouterUtil,可优雅的路由拦截式鉴权
上级
37bcee92
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
219 addition
and
7 deletion
+219
-7
sa-token-core/src/main/java/cn/dev33/satoken/SaTokenManager.java
...n-core/src/main/java/cn/dev33/satoken/SaTokenManager.java
+0
-3
sa-token-core/src/main/java/cn/dev33/satoken/fun/IsRunFunction.java
...ore/src/main/java/cn/dev33/satoken/fun/IsRunFunction.java
+33
-0
sa-token-core/src/main/java/cn/dev33/satoken/fun/SaFunction.java
...n-core/src/main/java/cn/dev33/satoken/fun/SaFunction.java
+1
-1
sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java
...ken-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java
+1
-0
sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java
...oken-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java
+1
-0
sa-token-demo-springboot/src/main/java/com/pj/satoken/MySaTokenConfig.java
...ingboot/src/main/java/com/pj/satoken/MySaTokenConfig.java
+1
-1
sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/autowired/SaTokenSpringAutowired.java
...va/cn/dev33/satoken/autowired/SaTokenSpringAutowired.java
+17
-0
sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaRouteInterceptor.java
...java/cn/dev33/satoken/interceptor/SaRouteInterceptor.java
+2
-2
sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaRouterUtil.java
.../main/java/cn/dev33/satoken/interceptor/SaRouterUtil.java
+163
-0
未找到文件。
sa-token-core/src/main/java/cn/dev33/satoken/SaTokenManager.java
浏览文件 @
d1d25f4d
...
...
@@ -146,7 +146,4 @@ public class SaTokenManager {
}
sa-token-core/src/main/java/cn/dev33/satoken/fun/IsRunFunction.java
0 → 100644
浏览文件 @
d1d25f4d
package
cn.dev33.satoken.fun
;
/**
* 根据boolean变量,决定是否执行一个函数
* @author kong
*
*/
public
class
IsRunFunction
{
/**
* 变量
*/
public
Boolean
isRun
;
/**
* 设定一个变量,如果为true,则执行exe函数
* @param isRun 变量
*/
public
IsRunFunction
(
boolean
isRun
)
{
this
.
isRun
=
isRun
;
}
/**
* 根据变量决定是否执行此函数
* @param function 函数
*/
public
void
exe
(
SaFunction
function
)
{
if
(
isRun
)
{
function
.
run
();
}
}
}
sa-token-core/src/main/java/cn/dev33/satoken/
stp
/SaFunction.java
→
sa-token-core/src/main/java/cn/dev33/satoken/
fun
/SaFunction.java
浏览文件 @
d1d25f4d
package
cn.dev33.satoken.
stp
;
package
cn.dev33.satoken.
fun
;
/**
* 模拟身份方法的辅助类
...
...
sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java
浏览文件 @
d1d25f4d
...
...
@@ -19,6 +19,7 @@ import cn.dev33.satoken.dao.SaTokenDao;
import
cn.dev33.satoken.exception.NotLoginException
;
import
cn.dev33.satoken.exception.NotPermissionException
;
import
cn.dev33.satoken.exception.NotRoleException
;
import
cn.dev33.satoken.fun.SaFunction
;
import
cn.dev33.satoken.session.SaSession
;
import
cn.dev33.satoken.session.TokenSign
;
import
cn.dev33.satoken.util.SaTokenConsts
;
...
...
sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java
浏览文件 @
d1d25f4d
...
...
@@ -2,6 +2,7 @@ package cn.dev33.satoken.stp;
import
java.util.List
;
import
cn.dev33.satoken.fun.SaFunction
;
import
cn.dev33.satoken.session.SaSession
;
/**
...
...
sa-token-demo-springboot/src/main/java/com/pj/satoken/MySaTokenConfig.java
浏览文件 @
d1d25f4d
...
...
@@ -31,7 +31,7 @@ public class MySaTokenConfig implements WebMvcConfigurer {
@Override
public
void
addInterceptors
(
InterceptorRegistry
registry
)
{
// 注册注解拦截器
registry
.
addInterceptor
(
new
SaAnnotationInterceptor
()).
addPathPatterns
(
"/**"
);
// 全局拦截器
registry
.
addInterceptor
(
new
SaAnnotationInterceptor
()).
addPathPatterns
(
"/**"
);
}
...
...
sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/autowired/SaTokenSpringAutowired.java
浏览文件 @
d1d25f4d
...
...
@@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.PathMatcher
;
import
cn.dev33.satoken.SaTokenManager
;
import
cn.dev33.satoken.action.SaTokenAction
;
...
...
@@ -97,4 +98,20 @@ public class SaTokenSpringAutowired {
}
/**
* 路由匹配器
*/
public
static
PathMatcher
pathMatcher
;
/**
* 利用自动匹配特性,获取SpringMVC框架内部使用的路由匹配器
* @param pathMatcher 要设置的 pathMatcher
*/
@Autowired
(
required
=
false
)
public
static
void
setPathMatcher
(
PathMatcher
pathMatcher
)
{
SaTokenSpringAutowired
.
pathMatcher
=
pathMatcher
;
}
}
sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaRouteInterceptor.java
浏览文件 @
d1d25f4d
...
...
@@ -43,7 +43,8 @@ public class SaRouteInterceptor implements HandlerInterceptor {
*/
private
SaRouteFunction
function
;
/**
* 表示登录验证
*/
...
...
@@ -144,7 +145,6 @@ public class SaRouteInterceptor implements HandlerInterceptor {
return
this
;
}
// ----------------- 构建相关 -----------------
/**
...
...
sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaRouterUtil.java
0 → 100644
浏览文件 @
d1d25f4d
package
cn.dev33.satoken.interceptor
;
import
java.util.Arrays
;
import
java.util.List
;
import
org.springframework.util.AntPathMatcher
;
import
org.springframework.util.PathMatcher
;
import
cn.dev33.satoken.SaTokenManager
;
import
cn.dev33.satoken.autowired.SaTokenSpringAutowired
;
import
cn.dev33.satoken.fun.IsRunFunction
;
import
cn.dev33.satoken.fun.SaFunction
;
/**
* 对路由匹配符相关操作的封装工具类
* @author kong
*
*/
public
class
SaRouterUtil
{
/**
* 在进行路由匹配时所使用的的 PathMatcher 对象
*/
private
static
PathMatcher
pathMatcher
;
/**
* @return 在进行路由匹配时所使用的的 PathMatcher 对象
*/
public
static
PathMatcher
getPathMatcher
()
{
if
(
pathMatcher
==
null
)
{
pathMatcher
=
SaTokenSpringAutowired
.
pathMatcher
;
if
(
pathMatcher
==
null
)
{
pathMatcher
=
new
AntPathMatcher
();
}
}
return
pathMatcher
;
}
/**
* @param pathMatcher 写入: 在进行路由匹配时所使用的的 PathMatcher 对象
*/
public
static
void
setPathMatcher
(
PathMatcher
pathMatcher
)
{
SaRouterUtil
.
pathMatcher
=
pathMatcher
;
}
// -------------------- 路由匹配相关 --------------------
/**
* 校验指定路由匹配符是否可以匹配成功指定路径
* @param pattern 路由匹配符
* @param path 需要匹配的路径
* @return 是否匹配成功
*/
public
static
boolean
isMatch
(
String
pattern
,
String
path
)
{
if
(
getPathMatcher
().
match
(
pattern
,
path
))
{
return
true
;
}
return
false
;
}
/**
* 校验指定路由匹配符是否可以匹配成功指定路径
* @param pattern 路由匹配符
* @param path 需要匹配的路径集合
* @return 是否匹配成功
*/
public
static
boolean
isMatch
(
List
<
String
>
patterns
,
String
path
)
{
for
(
String
pattern
:
patterns
)
{
if
(
isMatch
(
pattern
,
path
))
{
return
true
;
}
}
return
false
;
}
/**
* 校验指定路由匹配符是否可以匹配成功当前URI
* @param pattern 路由匹配符
* @return 是否匹配成功
*/
public
static
boolean
isMatchCurrURI
(
String
pattern
)
{
return
isMatch
(
pattern
,
SaTokenManager
.
getSaTokenServlet
().
getRequest
().
getRequestURI
());
}
/**
* 校验指定路由匹配符是否可以匹配成功当前URI
* @param pattern 路由匹配符
* @return 是否匹配成功
*/
public
static
boolean
isMatchCurrURI
(
List
<
String
>
patterns
)
{
return
isMatch
(
patterns
,
SaTokenManager
.
getSaTokenServlet
().
getRequest
().
getRequestURI
());
}
// -------------------- 执行相关 --------------------
/**
* 使用路由匹配符与当前URI执行匹配,如果匹配成功则执行验证函数
* @param pattern 路由匹配符
* @param function 要执行的方法
*/
public
static
void
match
(
String
pattern
,
SaFunction
function
)
{
if
(
isMatchCurrURI
(
pattern
))
{
function
.
run
();
}
}
/**
* 使用路由匹配符与当前URI执行匹配 (并指定排除匹配符),如果匹配成功则执行验证函数
* @param pattern 路由匹配符
* @param excludePattern 要排除的路由匹配符
* @param function 要执行的方法
*/
public
static
void
match
(
String
pattern
,
String
excludePattern
,
SaFunction
function
)
{
if
(
isMatchCurrURI
(
pattern
))
{
if
(
isMatchCurrURI
(
excludePattern
)
==
false
)
{
function
.
run
();
}
}
}
/**
* 使用路由匹配符集合与当前URI执行匹配,如果匹配成功则执行验证函数
* @param patterns 路由匹配符集合
* @param function 要执行的方法
*/
public
static
void
match
(
List
<
String
>
patterns
,
SaFunction
function
)
{
if
(
isMatchCurrURI
(
patterns
))
{
function
.
run
();
}
}
/**
* 使用路由匹配符集合与当前URI执行匹配 (并指定排除匹配符),如果匹配成功则执行验证函数
* @param patterns 路由匹配符集合
* @param excludePatterns 要排除的路由匹配符集合
* @param function 要执行的方法
*/
public
static
void
match
(
List
<
String
>
patterns
,
List
<
String
>
excludePatterns
,
SaFunction
function
)
{
if
(
isMatchCurrURI
(
patterns
))
{
if
(
isMatchCurrURI
(
excludePatterns
)
==
false
)
{
function
.
run
();
}
}
}
/**
* 使用路由匹配符集合与当前URI执行匹配,如果匹配成功则执行验证函数
* @param patterns 路由匹配符集合
* @return 匹配结果包装对象
*/
public
static
IsRunFunction
match
(
String
...
patterns
)
{
boolean
matchResult
=
isMatch
(
Arrays
.
asList
(
patterns
),
SaTokenManager
.
getSaTokenServlet
().
getRequest
().
getRequestURI
());
return
new
IsRunFunction
(
matchResult
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录