From bc855f2b1b5064f616f7c79cd5aad53e112f4eef Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Sat, 29 Apr 2023 07:12:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=BD=E7=A6=BB=E8=BF=87=E6=BB=A4=E5=99=A8?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20SaFilter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/dev33/satoken/filter/SaFilter.java | 70 ++++++++++++++++ sa-token-demo/sa-token-demo-solon/pom.xml | 7 ++ .../sa-token-demo-sso-server-solon/pom.xml | 8 ++ .../main/java/com/pj/SaTokenApplication.java | 1 + .../sa-token-context-dubbo3/pom.xml | 4 +- .../satoken/jboot/SaTokenPathFilter.java | 66 +++------------ .../satoken/jfinal/SaTokenPathFilter.java | 66 +++------------ .../reactor/filter/SaReactorFilter.java | 72 ++++------------ .../reactor/filter/SaReactorFilter.java | 72 ++++------------ .../solon/integration/SaTokenFilter.java | 82 ++++--------------- .../dev33/satoken/filter/SaServletFilter.java | 74 ++++------------- .../dev33/satoken/filter/SaServletFilter.java | 76 ++++------------- .../dev33/satoken/springboot/BasicsTest.java | 4 +- 13 files changed, 191 insertions(+), 411 deletions(-) create mode 100644 sa-token-core/src/main/java/cn/dev33/satoken/filter/SaFilter.java diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/filter/SaFilter.java b/sa-token-core/src/main/java/cn/dev33/satoken/filter/SaFilter.java new file mode 100644 index 00000000..65774195 --- /dev/null +++ b/sa-token-core/src/main/java/cn/dev33/satoken/filter/SaFilter.java @@ -0,0 +1,70 @@ +package cn.dev33.satoken.filter; + +import java.util.List; + +/** + * Sa-Token 过滤器接口,为不同版本的过滤器: + * 1、封装共同代码。 + * 2、定义统一的行为接口。 + * + * @author click33 + * @since 2023/4/29 + */ +public interface SaFilter { + + // ------------------------ 设置此过滤器 拦截 & 放行 的路由 + + /** + * 添加 [ 拦截路由 ] + * @param paths 路由 + * @return 对象自身 + */ + public SaFilter addInclude(String... paths); + + /** + * 添加 [ 放行路由 ] + * @param paths 路由 + * @return 对象自身 + */ + public SaFilter addExclude(String... paths); + + /** + * 写入 [ 拦截路由 ] 集合 + * @param pathList 路由集合 + * @return 对象自身 + */ + public SaFilter setIncludeList(List pathList); + + /** + * 写入 [ 放行路由 ] 集合 + * @param pathList 路由集合 + * @return 对象自身 + */ + public SaFilter setExcludeList(List pathList); + + + // ------------------------ 钩子函数 + + /** + * 写入[ 认证函数 ]: 每次请求执行 + * @param auth see note + * @return 对象自身 + */ + public SaFilter setAuth(SaFilterAuthStrategy auth); + + /** + * 写入[ 异常处理函数 ]:每次[ 认证函数 ]发生异常时执行此函数 + * @param error see note + * @return 对象自身 + */ + public SaFilter setError(SaFilterErrorStrategy error); + + /** + * 写入[ 前置函数 ]:在每次[ 认证函数 ]之前执行。 + * 注意点:前置认证函数将不受 includeList 与 excludeList 的限制,所有路由的请求都会进入 beforeAuth + * @param beforeAuth / + * @return 对象自身 + */ + public SaFilter setBeforeAuth(SaFilterAuthStrategy beforeAuth); + +} \ No newline at end of file diff --git a/sa-token-demo/sa-token-demo-solon/pom.xml b/sa-token-demo/sa-token-demo-solon/pom.xml index 836860f1..b2f65adf 100644 --- a/sa-token-demo/sa-token-demo-solon/pom.xml +++ b/sa-token-demo/sa-token-demo-solon/pom.xml @@ -6,6 +6,13 @@ sa-token-demo-solon 0.0.1-SNAPSHOT + + + org.noear + solon-parent + 2.2.3 + + diff --git a/sa-token-demo/sa-token-demo-sso-for-solon/sa-token-demo-sso-server-solon/pom.xml b/sa-token-demo/sa-token-demo-sso-for-solon/sa-token-demo-sso-server-solon/pom.xml index 65b53f2d..6f66fe1e 100644 --- a/sa-token-demo/sa-token-demo-sso-for-solon/sa-token-demo-sso-server-solon/pom.xml +++ b/sa-token-demo/sa-token-demo-sso-for-solon/sa-token-demo-sso-server-solon/pom.xml @@ -6,6 +6,14 @@ sa-token-demo-sso-server-solon 0.0.1-SNAPSHOT + + + org.noear + solon-parent + 2.2.3 + + + 1.34.0 diff --git a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/SaTokenApplication.java b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/SaTokenApplication.java index a183c0cc..ef69b80c 100644 --- a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/SaTokenApplication.java +++ b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/SaTokenApplication.java @@ -1,6 +1,7 @@ package com.pj; import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.filter.SaServletFilter; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/sa-token-plugin/sa-token-context-dubbo3/pom.xml b/sa-token-plugin/sa-token-context-dubbo3/pom.xml index 76ebd5d4..2820c6c8 100644 --- a/sa-token-plugin/sa-token-context-dubbo3/pom.xml +++ b/sa-token-plugin/sa-token-context-dubbo3/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 cn.dev33 diff --git a/sa-token-starter/sa-token-jboot-plugin/src/main/java/cn/dev33/satoken/jboot/SaTokenPathFilter.java b/sa-token-starter/sa-token-jboot-plugin/src/main/java/cn/dev33/satoken/jboot/SaTokenPathFilter.java index 7e24ffa6..c8de6c95 100644 --- a/sa-token-starter/sa-token-jboot-plugin/src/main/java/cn/dev33/satoken/jboot/SaTokenPathFilter.java +++ b/sa-token-starter/sa-token-jboot-plugin/src/main/java/cn/dev33/satoken/jboot/SaTokenPathFilter.java @@ -3,81 +3,50 @@ package cn.dev33.satoken.jboot; import cn.dev33.satoken.exception.SaTokenException; import cn.dev33.satoken.filter.SaFilterAuthStrategy; import cn.dev33.satoken.filter.SaFilterErrorStrategy; +import cn.dev33.satoken.filter.SaFilter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -public class SaTokenPathFilter { +public class SaTokenPathFilter implements SaFilter { // ------------------------ 设置此过滤器 拦截 & 放行 的路由 /** * 拦截路由 */ - private List includeList = new ArrayList<>(); + public List includeList = new ArrayList<>(); /** * 放行路由 */ - private List excludeList = new ArrayList<>(); + public List excludeList = new ArrayList<>(); - /** - * 添加 [拦截路由] - * @param paths 路由 - * @return 对象自身 - */ + @Override public SaTokenPathFilter addInclude(String... paths) { includeList.addAll(Arrays.asList(paths)); return this; } - /** - * 添加 [放行路由] - * @param paths 路由 - * @return 对象自身 - */ + @Override public SaTokenPathFilter addExclude(String... paths) { excludeList.addAll(Arrays.asList(paths)); return this; } - /** - * 写入 [拦截路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + @Override public SaTokenPathFilter setIncludeList(List pathList) { includeList = pathList; return this; } - /** - * 写入 [放行路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + @Override public SaTokenPathFilter setExcludeList(List pathList) { excludeList = pathList; return this; } - /** - * 获取 [拦截路由] 集合 - * @return see note - */ - public List getIncludeList() { - return includeList; - } - - /** - * 获取 [放行路由] 集合 - * @return see note - */ - public List getExcludeList() { - return excludeList; - } - // ------------------------ 钩子函数 @@ -95,34 +64,23 @@ public class SaTokenPathFilter { /** * 前置函数:在每次[认证函数]之前执行 + * 注意点:前置认证函数将不受 includeList 与 excludeList 的限制,所有路由的请求都会进入 beforeAuth */ public SaFilterAuthStrategy beforeAuth = r -> {}; - /** - * 写入[认证函数]: 每次请求执行 - * @param auth see note - * @return 对象自身 - */ + @Override public SaTokenPathFilter setAuth(SaFilterAuthStrategy auth) { this.auth = auth; return this; } - /** - * 写入[异常处理函数]:每次[认证函数]发生异常时执行此函数 - * @param error see note - * @return 对象自身 - */ + @Override public SaTokenPathFilter setError(SaFilterErrorStrategy error) { this.error = error; return this; } - /** - * 写入[前置函数]:在每次[认证函数]之前执行 - * @param beforeAuth see note - * @return 对象自身 - */ + @Override public SaTokenPathFilter setBeforeAuth(SaFilterAuthStrategy beforeAuth) { this.beforeAuth = beforeAuth; return this; diff --git a/sa-token-starter/sa-token-jfinal-plugin/src/main/java/cn/dev33/satoken/jfinal/SaTokenPathFilter.java b/sa-token-starter/sa-token-jfinal-plugin/src/main/java/cn/dev33/satoken/jfinal/SaTokenPathFilter.java index 731ef14c..2444422e 100644 --- a/sa-token-starter/sa-token-jfinal-plugin/src/main/java/cn/dev33/satoken/jfinal/SaTokenPathFilter.java +++ b/sa-token-starter/sa-token-jfinal-plugin/src/main/java/cn/dev33/satoken/jfinal/SaTokenPathFilter.java @@ -3,81 +3,50 @@ package cn.dev33.satoken.jfinal; import cn.dev33.satoken.exception.SaTokenException; import cn.dev33.satoken.filter.SaFilterAuthStrategy; import cn.dev33.satoken.filter.SaFilterErrorStrategy; +import cn.dev33.satoken.filter.SaFilter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -public class SaTokenPathFilter { +public class SaTokenPathFilter implements SaFilter { // ------------------------ 设置此过滤器 拦截 & 放行 的路由 /** * 拦截路由 */ - private List includeList = new ArrayList<>(); + public List includeList = new ArrayList<>(); /** * 放行路由 */ - private List excludeList = new ArrayList<>(); + public List excludeList = new ArrayList<>(); - /** - * 添加 [拦截路由] - * @param paths 路由 - * @return 对象自身 - */ + @Override public SaTokenPathFilter addInclude(String... paths) { includeList.addAll(Arrays.asList(paths)); return this; } - /** - * 添加 [放行路由] - * @param paths 路由 - * @return 对象自身 - */ + @Override public SaTokenPathFilter addExclude(String... paths) { excludeList.addAll(Arrays.asList(paths)); return this; } - /** - * 写入 [拦截路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + @Override public SaTokenPathFilter setIncludeList(List pathList) { includeList = pathList; return this; } - /** - * 写入 [放行路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + @Override public SaTokenPathFilter setExcludeList(List pathList) { excludeList = pathList; return this; } - /** - * 获取 [拦截路由] 集合 - * @return see note - */ - public List getIncludeList() { - return includeList; - } - - /** - * 获取 [放行路由] 集合 - * @return see note - */ - public List getExcludeList() { - return excludeList; - } - // ------------------------ 钩子函数 @@ -95,34 +64,23 @@ public class SaTokenPathFilter { /** * 前置函数:在每次[认证函数]之前执行 + * 注意点:前置认证函数将不受 includeList 与 excludeList 的限制,所有路由的请求都会进入 beforeAuth */ public SaFilterAuthStrategy beforeAuth = r -> {}; - /** - * 写入[认证函数]: 每次请求执行 - * @param auth see note - * @return 对象自身 - */ + @Override public SaTokenPathFilter setAuth(SaFilterAuthStrategy auth) { this.auth = auth; return this; } - /** - * 写入[异常处理函数]:每次[认证函数]发生异常时执行此函数 - * @param error see note - * @return 对象自身 - */ + @Override public SaTokenPathFilter setError(SaFilterErrorStrategy error) { this.error = error; return this; } - /** - * 写入[前置函数]:在每次[认证函数]之前执行 - * @param beforeAuth see note - * @return 对象自身 - */ + @Override public SaTokenPathFilter setBeforeAuth(SaFilterAuthStrategy beforeAuth) { this.beforeAuth = beforeAuth; return this; diff --git a/sa-token-starter/sa-token-reactor-spring-boot-starter/src/main/java/cn/dev33/satoken/reactor/filter/SaReactorFilter.java b/sa-token-starter/sa-token-reactor-spring-boot-starter/src/main/java/cn/dev33/satoken/reactor/filter/SaReactorFilter.java index c0603192..f48d150d 100644 --- a/sa-token-starter/sa-token-reactor-spring-boot-starter/src/main/java/cn/dev33/satoken/reactor/filter/SaReactorFilter.java +++ b/sa-token-starter/sa-token-reactor-spring-boot-starter/src/main/java/cn/dev33/satoken/reactor/filter/SaReactorFilter.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import cn.dev33.satoken.filter.SaFilter; import org.springframework.core.annotation.Order; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; @@ -27,75 +28,43 @@ import reactor.core.publisher.Mono; * */ @Order(SaTokenConsts.ASSEMBLY_ORDER) -public class SaReactorFilter implements WebFilter { +public class SaReactorFilter implements SaFilter, WebFilter { // ------------------------ 设置此过滤器 拦截 & 放行 的路由 /** * 拦截路由 */ - private List includeList = new ArrayList<>(); + public List includeList = new ArrayList<>(); /** * 放行路由 */ - private List excludeList = new ArrayList<>(); + public List excludeList = new ArrayList<>(); - /** - * 添加 [拦截路由] - * @param paths 路由 - * @return 对象自身 - */ + @Override public SaReactorFilter addInclude(String... paths) { includeList.addAll(Arrays.asList(paths)); return this; } - - /** - * 添加 [放行路由] - * @param paths 路由 - * @return 对象自身 - */ + + @Override public SaReactorFilter addExclude(String... paths) { excludeList.addAll(Arrays.asList(paths)); return this; } - /** - * 写入 [拦截路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + @Override public SaReactorFilter setIncludeList(List pathList) { includeList = pathList; return this; } - - /** - * 写入 [放行路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + + @Override public SaReactorFilter setExcludeList(List pathList) { excludeList = pathList; return this; } - - /** - * 获取 [拦截路由] 集合 - * @return see note - */ - public List getIncludeList() { - return includeList; - } - - /** - * 获取 [放行路由] 集合 - * @return see note - */ - public List getExcludeList() { - return excludeList; - } // ------------------------ 钩子函数 @@ -113,35 +82,24 @@ public class SaReactorFilter implements WebFilter { }; /** - * 前置函数:在每次[认证函数]之前执行 + * 前置函数:在每次[认证函数]之前执行 + * 注意点:前置认证函数将不受 includeList 与 excludeList 的限制,所有路由的请求都会进入 beforeAuth */ public SaFilterAuthStrategy beforeAuth = r -> {}; - /** - * 写入[认证函数]: 每次请求执行 - * @param auth see note - * @return 对象自身 - */ + @Override public SaReactorFilter setAuth(SaFilterAuthStrategy auth) { this.auth = auth; return this; } - /** - * 写入[异常处理函数]:每次[认证函数]发生异常时执行此函数 - * @param error see note - * @return 对象自身 - */ + @Override public SaReactorFilter setError(SaFilterErrorStrategy error) { this.error = error; return this; } - /** - * 写入[前置函数]:在每次[认证函数]之前执行 - * @param beforeAuth see note - * @return 对象自身 - */ + @Override public SaReactorFilter setBeforeAuth(SaFilterAuthStrategy beforeAuth) { this.beforeAuth = beforeAuth; return this; diff --git a/sa-token-starter/sa-token-reactor-spring-boot3-starter/src/main/java/cn/dev33/satoken/reactor/filter/SaReactorFilter.java b/sa-token-starter/sa-token-reactor-spring-boot3-starter/src/main/java/cn/dev33/satoken/reactor/filter/SaReactorFilter.java index e03c8888..a3287b31 100644 --- a/sa-token-starter/sa-token-reactor-spring-boot3-starter/src/main/java/cn/dev33/satoken/reactor/filter/SaReactorFilter.java +++ b/sa-token-starter/sa-token-reactor-spring-boot3-starter/src/main/java/cn/dev33/satoken/reactor/filter/SaReactorFilter.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import cn.dev33.satoken.filter.SaFilter; import org.springframework.core.annotation.Order; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; @@ -27,75 +28,43 @@ import reactor.core.publisher.Mono; * */ @Order(SaTokenConsts.ASSEMBLY_ORDER) -public class SaReactorFilter implements WebFilter { +public class SaReactorFilter implements SaFilter, WebFilter { // ------------------------ 设置此过滤器 拦截 & 放行 的路由 /** * 拦截路由 */ - private List includeList = new ArrayList<>(); + public List includeList = new ArrayList<>(); /** * 放行路由 */ - private List excludeList = new ArrayList<>(); + public List excludeList = new ArrayList<>(); - /** - * 添加 [拦截路由] - * @param paths 路由 - * @return 对象自身 - */ + @Override public SaReactorFilter addInclude(String... paths) { includeList.addAll(Arrays.asList(paths)); return this; } - - /** - * 添加 [放行路由] - * @param paths 路由 - * @return 对象自身 - */ + + @Override public SaReactorFilter addExclude(String... paths) { excludeList.addAll(Arrays.asList(paths)); return this; } - /** - * 写入 [拦截路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + @Override public SaReactorFilter setIncludeList(List pathList) { includeList = pathList; return this; } - - /** - * 写入 [放行路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + + @Override public SaReactorFilter setExcludeList(List pathList) { excludeList = pathList; return this; } - - /** - * 获取 [拦截路由] 集合 - * @return see note - */ - public List getIncludeList() { - return includeList; - } - - /** - * 获取 [放行路由] 集合 - * @return see note - */ - public List getExcludeList() { - return excludeList; - } // ------------------------ 钩子函数 @@ -113,35 +82,24 @@ public class SaReactorFilter implements WebFilter { }; /** - * 前置函数:在每次[认证函数]之前执行 + * 前置函数:在每次[认证函数]之前执行 + * 注意点:前置认证函数将不受 includeList 与 excludeList 的限制,所有路由的请求都会进入 beforeAuth */ public SaFilterAuthStrategy beforeAuth = r -> {}; - /** - * 写入[认证函数]: 每次请求执行 - * @param auth see note - * @return 对象自身 - */ + @Override public SaReactorFilter setAuth(SaFilterAuthStrategy auth) { this.auth = auth; return this; } - /** - * 写入[异常处理函数]:每次[认证函数]发生异常时执行此函数 - * @param error see note - * @return 对象自身 - */ + @Override public SaReactorFilter setError(SaFilterErrorStrategy error) { this.error = error; return this; } - /** - * 写入[前置函数]:在每次[认证函数]之前执行 - * @param beforeAuth see note - * @return 对象自身 - */ + @Override public SaReactorFilter setBeforeAuth(SaFilterAuthStrategy beforeAuth) { this.beforeAuth = beforeAuth; return this; diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenFilter.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenFilter.java index 31866411..6a4698f6 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenFilter.java +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenFilter.java @@ -6,6 +6,7 @@ import cn.dev33.satoken.exception.SaTokenException; import cn.dev33.satoken.exception.StopMatchException; import cn.dev33.satoken.filter.SaFilterAuthStrategy; import cn.dev33.satoken.filter.SaFilterErrorStrategy; +import cn.dev33.satoken.filter.SaFilter; import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.strategy.SaStrategy; import org.noear.solon.Solon; @@ -26,7 +27,8 @@ import java.util.List; * @author noear * @since 1.10 */ -public class SaTokenFilter implements Filter { //之所以改名,为了跟 SaTokenInterceptor 形成一对 +public class SaTokenFilter implements SaFilter, Filter { //之所以改名,为了跟 SaTokenInterceptor 形成一对 + /** * 是否打开注解鉴权 */ @@ -37,88 +39,50 @@ public class SaTokenFilter implements Filter { //之所以改名,为了跟 SaT /** * 拦截路由 */ - protected List includeList = new ArrayList<>(); + public List includeList = new ArrayList<>(); /** * 放行路由 */ - protected List excludeList = new ArrayList<>(); + public List excludeList = new ArrayList<>(); - /** - * 添加 [拦截路由] - * - * @param paths 路由 - * @return 对象自身 - */ + @Override public SaTokenFilter addInclude(String... paths) { includeList.addAll(Arrays.asList(paths)); return this; } - /** - * 添加 [放行路由] - * - * @param paths 路由 - * @return 对象自身 - */ + @Override public SaTokenFilter addExclude(String... paths) { excludeList.addAll(Arrays.asList(paths)); return this; } - /** - * 写入 [拦截路由] 集合 - * - * @param pathList 路由集合 - * @return 对象自身 - */ + @Override public SaTokenFilter setIncludeList(List pathList) { includeList = pathList; return this; } - /** - * 写入 [放行路由] 集合 - * - * @param pathList 路由集合 - * @return 对象自身 - */ + @Override public SaTokenFilter setExcludeList(List pathList) { excludeList = pathList; return this; } - /** - * 获取 [拦截路由] 集合 - * - * @return see note - */ - public List getIncludeList() { - return includeList; - } - - /** - * 获取 [放行路由] 集合 - * - * @return see note - */ - public List getExcludeList() { - return excludeList; - } - // ------------------------ 钩子函数 /** * 认证函数:每次请求执行 */ - protected SaFilterAuthStrategy auth = r -> { + public SaFilterAuthStrategy auth = r -> { }; /** * 异常处理函数:每次[认证函数]发生异常时执行此函数 */ - protected SaFilterErrorStrategy error = e -> { + public SaFilterErrorStrategy error = e -> { if (e instanceof SaTokenException) { throw (SaTokenException) e; } else { @@ -128,38 +92,24 @@ public class SaTokenFilter implements Filter { //之所以改名,为了跟 SaT /** * 前置函数:在每次[认证函数]之前执行 + * 注意点:前置认证函数将不受 includeList 与 excludeList 的限制,所有路由的请求都会进入 beforeAuth */ - protected SaFilterAuthStrategy beforeAuth = r -> { + public SaFilterAuthStrategy beforeAuth = r -> { }; - /** - * 写入[认证函数]: 每次请求执行 - * - * @param auth see note - * @return 对象自身 - */ + @Override public SaTokenFilter setAuth(SaFilterAuthStrategy auth) { this.auth = auth; return this; } - /** - * 写入[异常处理函数]:每次[认证函数]发生异常时执行此函数 - * - * @param error see note - * @return 对象自身 - */ + @Override public SaTokenFilter setError(SaFilterErrorStrategy error) { this.error = error; return this; } - /** - * 写入[前置函数]:在每次[认证函数]之前执行 - * - * @param beforeAuth see note - * @return 对象自身 - */ + @Override public SaTokenFilter setBeforeAuth(SaFilterAuthStrategy beforeAuth) { this.beforeAuth = beforeAuth; return this; diff --git a/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/filter/SaServletFilter.java b/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/filter/SaServletFilter.java index a647e206..ddd54d7d 100644 --- a/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/filter/SaServletFilter.java +++ b/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/filter/SaServletFilter.java @@ -27,75 +27,43 @@ import cn.dev33.satoken.util.SaTokenConsts; * */ @Order(SaTokenConsts.ASSEMBLY_ORDER) -public class SaServletFilter implements Filter { +public class SaServletFilter implements SaFilter, Filter { // ------------------------ 设置此过滤器 拦截 & 放行 的路由 /** * 拦截路由 */ - private List includeList = new ArrayList<>(); + public List includeList = new ArrayList<>(); /** * 放行路由 */ - private List excludeList = new ArrayList<>(); + public List excludeList = new ArrayList<>(); - /** - * 添加 [拦截路由] - * @param paths 路由 - * @return 对象自身 - */ + @Override public SaServletFilter addInclude(String... paths) { includeList.addAll(Arrays.asList(paths)); return this; } - - /** - * 添加 [放行路由] - * @param paths 路由 - * @return 对象自身 - */ + + @Override public SaServletFilter addExclude(String... paths) { excludeList.addAll(Arrays.asList(paths)); return this; } - /** - * 写入 [拦截路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + @Override public SaServletFilter setIncludeList(List pathList) { includeList = pathList; return this; } - - /** - * 写入 [放行路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + + @Override public SaServletFilter setExcludeList(List pathList) { excludeList = pathList; return this; } - - /** - * 获取 [拦截路由] 集合 - * @return see note - */ - public List getIncludeList() { - return includeList; - } - - /** - * 获取 [放行路由] 集合 - * @return see note - */ - public List getExcludeList() { - return excludeList; - } // ------------------------ 钩子函数 @@ -113,35 +81,24 @@ public class SaServletFilter implements Filter { }; /** - * 前置函数:在每次[认证函数]之前执行 + * 前置函数:在每次[认证函数]之前执行 + * 注意点:前置认证函数将不受 includeList 与 excludeList 的限制,所有路由的请求都会进入 beforeAuth */ public SaFilterAuthStrategy beforeAuth = r -> {}; - /** - * 写入[认证函数]: 每次请求执行 - * @param auth see note - * @return 对象自身 - */ + @Override public SaServletFilter setAuth(SaFilterAuthStrategy auth) { this.auth = auth; return this; } - /** - * 写入[异常处理函数]:每次[认证函数]发生异常时执行此函数 - * @param error see note - * @return 对象自身 - */ + @Override public SaServletFilter setError(SaFilterErrorStrategy error) { this.error = error; return this; } - /** - * 写入[前置函数]:在每次[认证函数]之前执行 - * @param beforeAuth see note - * @return 对象自身 - */ + @Override public SaServletFilter setBeforeAuth(SaFilterAuthStrategy beforeAuth) { this.beforeAuth = beforeAuth; return this; @@ -151,8 +108,7 @@ public class SaServletFilter implements Filter { // ------------------------ doFilter @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { try { // 执行全局过滤器 diff --git a/sa-token-starter/sa-token-spring-boot3-starter/src/main/java/cn/dev33/satoken/filter/SaServletFilter.java b/sa-token-starter/sa-token-spring-boot3-starter/src/main/java/cn/dev33/satoken/filter/SaServletFilter.java index 3c6b40e6..9255993c 100644 --- a/sa-token-starter/sa-token-spring-boot3-starter/src/main/java/cn/dev33/satoken/filter/SaServletFilter.java +++ b/sa-token-starter/sa-token-spring-boot3-starter/src/main/java/cn/dev33/satoken/filter/SaServletFilter.java @@ -26,75 +26,43 @@ import jakarta.servlet.ServletResponse; * */ @Order(SaTokenConsts.ASSEMBLY_ORDER) -public class SaServletFilter implements Filter { +public class SaServletFilter implements SaFilter, Filter { // ------------------------ 设置此过滤器 拦截 & 放行 的路由 /** * 拦截路由 */ - private List includeList = new ArrayList<>(); + public List includeList = new ArrayList<>(); /** * 放行路由 */ - private List excludeList = new ArrayList<>(); + public List excludeList = new ArrayList<>(); - /** - * 添加 [拦截路由] - * @param paths 路由 - * @return 对象自身 - */ + @Override public SaServletFilter addInclude(String... paths) { includeList.addAll(Arrays.asList(paths)); return this; } - - /** - * 添加 [放行路由] - * @param paths 路由 - * @return 对象自身 - */ + + @Override public SaServletFilter addExclude(String... paths) { excludeList.addAll(Arrays.asList(paths)); return this; } - /** - * 写入 [拦截路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + @Override public SaServletFilter setIncludeList(List pathList) { includeList = pathList; return this; } - - /** - * 写入 [放行路由] 集合 - * @param pathList 路由集合 - * @return 对象自身 - */ + + @Override public SaServletFilter setExcludeList(List pathList) { excludeList = pathList; return this; } - - /** - * 获取 [拦截路由] 集合 - * @return see note - */ - public List getIncludeList() { - return includeList; - } - - /** - * 获取 [放行路由] 集合 - * @return see note - */ - public List getExcludeList() { - return excludeList; - } // ------------------------ 钩子函数 @@ -112,35 +80,24 @@ public class SaServletFilter implements Filter { }; /** - * 前置函数:在每次[认证函数]之前执行 + * 前置函数:在每次[认证函数]之前执行 + * 注意点:前置认证函数将不受 includeList 与 excludeList 的限制,所有路由的请求都会进入 beforeAuth */ public SaFilterAuthStrategy beforeAuth = r -> {}; - /** - * 写入[认证函数]: 每次请求执行 - * @param auth see note - * @return 对象自身 - */ + @Override public SaServletFilter setAuth(SaFilterAuthStrategy auth) { this.auth = auth; return this; } - /** - * 写入[异常处理函数]:每次[认证函数]发生异常时执行此函数 - * @param error see note - * @return 对象自身 - */ + @Override public SaServletFilter setError(SaFilterErrorStrategy error) { this.error = error; return this; } - /** - * 写入[前置函数]:在每次[认证函数]之前执行 - * @param beforeAuth see note - * @return 对象自身 - */ + @Override public SaServletFilter setBeforeAuth(SaFilterAuthStrategy beforeAuth) { this.beforeAuth = beforeAuth; return this; @@ -150,8 +107,7 @@ public class SaServletFilter implements Filter { // ------------------------ doFilter @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { try { // 执行全局过滤器 @@ -179,7 +135,7 @@ public class SaServletFilter implements Filter { } @Override - public void init(FilterConfig filterConfig) throws ServletException { + public void init(FilterConfig filterConfig) { } @Override diff --git a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/BasicsTest.java b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/BasicsTest.java index 64280506..9b5c90c2 100644 --- a/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/BasicsTest.java +++ b/sa-token-test/sa-token-springboot-test/src/test/java/cn/dev33/satoken/springboot/BasicsTest.java @@ -762,8 +762,8 @@ public class BasicsTest { .setAuth(obj -> {}) .setBeforeAuth(obj -> {}) ; - Assertions.assertEquals(filter.getIncludeList().get(0), "/**"); - Assertions.assertEquals(filter.getExcludeList().get(0), "/favicon.ico"); + Assertions.assertEquals(filter.includeList.get(0), "/**"); + Assertions.assertEquals(filter.excludeList.get(0), "/favicon.ico"); // 以下功能无法测试 filter.init(null); filter.doFilter(SpringMVCUtil.getRequest(), SpringMVCUtil.getResponse(), new MockFilterChain());