重构:全局过滤器执行函数放到成员变量里.

This commit is contained in:
shengzhang 2021-04-15 19:10:47 +08:00
parent 5e97c5d7fa
commit 078119e12c
11 changed files with 99 additions and 135 deletions

View File

@ -11,10 +11,6 @@ import cn.dev33.satoken.context.SaTokenContext;
import cn.dev33.satoken.context.SaTokenContextDefaultImpl;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.dao.SaTokenDaoDefaultImpl;
import cn.dev33.satoken.filter.SaFilterErrorStrategy;
import cn.dev33.satoken.filter.SaFilterErrorStrategyDefaultImpl;
import cn.dev33.satoken.filter.SaFilterStrategy;
import cn.dev33.satoken.filter.SaFilterStrategyDefaultImpl;
import cn.dev33.satoken.stp.StpInterface;
import cn.dev33.satoken.stp.StpInterfaceDefaultImpl;
import cn.dev33.satoken.stp.StpLogic;
@ -128,42 +124,6 @@ public class SaTokenManager {
return saTokenContext;
}
/**
* 全局过滤器-认证策略 Bean
*/
private static SaFilterStrategy strategy;
public static void setSaFilterStrategy(SaFilterStrategy strategy) {
SaTokenManager.strategy = strategy;
}
public static SaFilterStrategy getSaFilterStrategy() {
if (strategy == null) {
synchronized (SaTokenManager.class) {
if (strategy == null) {
setSaFilterStrategy(new SaFilterStrategyDefaultImpl());
}
}
}
return strategy;
}
/**
* 全局过滤器-异常处理策略 Bean
*/
private static SaFilterErrorStrategy errorStrategy;
public static void setSaFilterErrorStrategy(SaFilterErrorStrategy errorStrategy) {
SaTokenManager.errorStrategy = errorStrategy;
}
public static SaFilterErrorStrategy getSaFilterErrorStrategy() {
if (errorStrategy == null) {
synchronized (SaTokenManager.class) {
if (errorStrategy == null) {
setSaFilterErrorStrategy(new SaFilterErrorStrategyDefaultImpl());
}
}
}
return errorStrategy;
}
/**
* StpLogic集合, 记录框架所有成功初始化的StpLogic
*/

View File

@ -1,21 +0,0 @@
package cn.dev33.satoken.filter;
import cn.dev33.satoken.exception.SaTokenException;
/**
* sa-token全局过滤器-异常处理策略 [默认实现]
*
* @author kong
*
*/
public class SaFilterErrorStrategyDefaultImpl implements SaFilterErrorStrategy {
/**
* 执行方法
*/
@Override
public Object run(Throwable e) {
throw new SaTokenException(e);
}
}

View File

@ -1,19 +0,0 @@
package cn.dev33.satoken.filter;
/**
* sa-token全局过滤器-认证策略 [默认实现]
*
* @author kong
*
*/
public class SaFilterStrategyDefaultImpl implements SaFilterStrategy {
/**
* 执行验证的方法
*/
@Override
public void run(Object r) {
// default no action
}
}

View File

@ -30,8 +30,21 @@ public class SaTokenConfigure implements WebMvcConfigurer {
// @Bean
// public SaServletFilter getSaReactorFilter() {
// return new SaServletFilter()
// // 指定 [拦截路由]
// .addInclude("/**")
// .addExclude("/favicon.ico");
// // 指定 [放行路由]
// .addExclude("/favicon.ico")
// // 指定[认证函数]: 每次请求执行
// .setAuth(r -> {
// System.out.println("---------- sa全局认证");
// SaRouterUtil.match("/test/test", () -> StpUtil.checkLogin());
// })
// // 指定[异常处理函数]每次[认证函数]发生异常时执行此函数
// .setError(e -> {
// System.out.println("---------- sa全局异常 ");
// return AjaxJson.getError(e.getMessage());
// })
// ;
// }
}

View File

@ -6,7 +6,7 @@ import org.springframework.context.annotation.Configuration;
import com.pj.util.AjaxJson;
import cn.dev33.satoken.filter.SaFilterErrorStrategy;
import cn.dev33.satoken.filter.SaFilterStrategy;
import cn.dev33.satoken.filter.SaFilterAuthStrategy;
import cn.dev33.satoken.reactor.filter.SaReactorFilter;
import cn.dev33.satoken.router.SaRouterUtil;
import cn.dev33.satoken.stp.StpUtil;
@ -33,7 +33,7 @@ public class SaTokenConfigure {
* 注册 [sa-token全局过滤器-认证策略]
*/
@Bean
public SaFilterStrategy getSaFilterStrategy() {
public SaFilterAuthStrategy getSaFilterStrategy() {
return r -> {
System.out.println("---------- 进入sa-token全局过滤器 -----------");
SaRouterUtil.match("/test/test333", () -> StpUtil.checkLogin());

View File

@ -59,12 +59,12 @@ body{font-size: 16px; color: #34495E; font-family: "Source Sans Pro","Helvetica
100%{box-shadow: 0 0 20px #FFF;}
}
/* 微信二维码 */
.wx-qr-box{margin-top: 50px; margin-bottom: 20px;}
.wx-qr-box{margin-top: 50px;}
.qr-item{display: inline-block;}
.qr-item p{font-size: 12px; padding: 0 0.5em;}
/* .qr-item a{color: #42B983;} */
.wx-qr{width: 150px;}
.wx-qr-box p{margin-top: 10px; color: #666;}
.wx-qr-box p{margin-top: 10px; color: #666; margin-bottom: 20px;}
.wx-qr,.dro-qr{cursor: pointer;}
/* -------- 支持特性 --------- */

View File

@ -204,6 +204,9 @@
<a href="http://www.jmwl51.com/" target="_blank">
<img src="https://oss.dev33.cn/sa-token/com/jimeng.png">
</a>
<a href="https://uniadmin.jiangruyi.com/" target="_blank">
<img src="https://oss.dev33.cn/sa-token/com/uniadmin.png">
</a>
</div>
<div style="height: 10px; clear: both;"></div>
<p style="color: #666;">

View File

@ -9,7 +9,9 @@ import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
import cn.dev33.satoken.SaTokenManager;
import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.filter.SaFilterAuthStrategy;
import cn.dev33.satoken.filter.SaFilterErrorStrategy;
import cn.dev33.satoken.reactor.context.SaReactorHolder;
import cn.dev33.satoken.reactor.context.SaReactorSyncHolder;
import cn.dev33.satoken.router.SaRouterUtil;
@ -92,6 +94,41 @@ public class SaReactorFilter implements WebFilter {
return excludeList;
}
// ------------------------ 执行函数
/**
* 认证函数每次请求执行
*/
public SaFilterAuthStrategy auth = r -> {};
/**
* 异常处理函数每次[认证函数]发生异常时执行此函数
*/
public SaFilterErrorStrategy error = e -> {
throw new SaTokenException(e);
};
/**
* 写入[认证函数]: 每次请求执行
* @param auth see note
* @return 对象自身
*/
public SaReactorFilter setAuth(SaFilterAuthStrategy auth) {
this.auth = auth;
return this;
}
/**
* 写入[异常处理函数]每次[认证函数]发生异常时执行此函数
* @param error see note
* @return 对象自身
*/
public SaReactorFilter setError(SaFilterErrorStrategy error) {
this.error = error;
return this;
}
// ------------------------ filter
@ -103,11 +140,11 @@ public class SaReactorFilter implements WebFilter {
SaReactorSyncHolder.setContent(exchange);
// 执行全局过滤器
SaRouterUtil.match(includeList, excludeList, () -> SaTokenManager.getSaFilterStrategy().run(null));
SaRouterUtil.match(includeList, excludeList, () -> auth.run(null));
} catch (Throwable e) {
// 1. 获取异常处理策略结果
Object result = SaTokenManager.getSaFilterErrorStrategy().run(e);
Object result = error.run(e);
String resultString = String.valueOf(result);
// 2. 写入输出流

View File

@ -12,8 +12,6 @@ import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.context.SaTokenContext;
import cn.dev33.satoken.context.SaTokenContextForThreadLocal;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.filter.SaFilterErrorStrategy;
import cn.dev33.satoken.filter.SaFilterStrategy;
import cn.dev33.satoken.stp.StpInterface;
/**
@ -104,26 +102,6 @@ public class SaTokenSpringAutowired {
SaTokenManager.setSaTokenContext(saTokenContext);
}
/**
* 注入[sa-token全局过滤器-认证策略]
*
* @param strategy see note
*/
@Autowired(required = false)
public void setSaFilterStrategy(SaFilterStrategy strategy) {
SaTokenManager.setSaFilterStrategy(strategy);
}
/**
* 注入[sa-token全局过滤器-异常处理策略]
*
* @param errorStrategy see note
*/
@Autowired(required = false)
public void setSaFilterErrorStrategy(SaFilterErrorStrategy errorStrategy) {
SaTokenManager.setSaFilterErrorStrategy(errorStrategy);
}
/**
* 利用自动匹配特性获取SpringMVC框架内部使用的路由匹配器
*

View File

@ -14,7 +14,7 @@ import javax.servlet.ServletResponse;
import org.springframework.core.annotation.Order;
import cn.dev33.satoken.SaTokenManager;
import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.router.SaRouterUtil;
import cn.dev33.satoken.util.SaTokenConsts;
@ -94,6 +94,41 @@ public class SaServletFilter implements Filter {
return excludeList;
}
// ------------------------ 执行函数
/**
* 认证函数每次请求执行
*/
public SaFilterAuthStrategy auth = r -> {};
/**
* 异常处理函数每次[认证函数]发生异常时执行此函数
*/
public SaFilterErrorStrategy error = e -> {
throw new SaTokenException(e);
};
/**
* 写入[认证函数]: 每次请求执行
* @param auth see note
* @return 对象自身
*/
public SaServletFilter setAuth(SaFilterAuthStrategy auth) {
this.auth = auth;
return this;
}
/**
* 写入[异常处理函数]每次[认证函数]发生异常时执行此函数
* @param error see note
* @return 对象自身
*/
public SaServletFilter setError(SaFilterErrorStrategy error) {
this.error = error;
return this;
}
// ------------------------ doFilter
@ -103,11 +138,11 @@ public class SaServletFilter implements Filter {
try {
// 执行全局过滤器
SaRouterUtil.match(includeList, excludeList, () -> SaTokenManager.getSaFilterStrategy().run(null));
SaRouterUtil.match(includeList, excludeList, () -> auth.run(null));
} catch (Throwable e) {
// 1. 获取异常处理策略结果
Object result = SaTokenManager.getSaFilterErrorStrategy().run(e);
Object result = error.run(e);
String resultString = String.valueOf(result);
// 2. 写入输出流

View File

@ -11,8 +11,6 @@ import cn.dev33.satoken.action.SaTokenAction;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.context.SaTokenContext;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.filter.SaFilterErrorStrategy;
import cn.dev33.satoken.filter.SaFilterStrategy;
import cn.dev33.satoken.stp.StpInterface;
/**
@ -95,26 +93,6 @@ public class SaTokenSpringAutowired {
SaTokenManager.setSaTokenContext(saTokenContext);
}
/**
* 注入[sa-token全局过滤器-认证策略]
*
* @param strategy see note
*/
@Autowired(required = false)
public void setSaFilterStrategy(SaFilterStrategy strategy) {
SaTokenManager.setSaFilterStrategy(strategy);
}
/**
* 注入[sa-token全局过滤器-异常处理策略]
*
* @param errorStrategy see note
*/
@Autowired(required = false)
public void setSaFilterErrorStrategy(SaFilterErrorStrategy errorStrategy) {
SaTokenManager.setSaFilterErrorStrategy(errorStrategy);
}
/**
* 利用自动匹配特性获取SpringMVC框架内部使用的路由匹配器
*