From 736ac66701b1c4aef0be628d207810d19f76caf6 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Tue, 15 Jun 2021 18:17:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/dev33/satoken/router/SaRouterUtil.java | 143 ++++++++++++++++++ .../java/com/pj/satoken/SaTokenConfigure.java | 2 +- sa-token-doc/doc/start/download.md | 1 + sa-token-doc/doc/use/global-filter.md | 2 +- sa-token-doc/index.html | 3 + 5 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 sa-token-core/src/main/java/cn/dev33/satoken/router/SaRouterUtil.java diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/router/SaRouterUtil.java b/sa-token-core/src/main/java/cn/dev33/satoken/router/SaRouterUtil.java new file mode 100644 index 00000000..3c014650 --- /dev/null +++ b/sa-token-core/src/main/java/cn/dev33/satoken/router/SaRouterUtil.java @@ -0,0 +1,143 @@ +package cn.dev33.satoken.router; + +import java.util.Arrays; +import java.util.List; + +import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.context.SaHolder; +import cn.dev33.satoken.exception.StopMatchException; +import cn.dev33.satoken.fun.IsRunFunction; +import cn.dev33.satoken.fun.SaFunction; + +/** + * 对路由匹配符相关操作的封装工具类 + *

本类设计已过时,未来版本可能移除此类,请及时更换为 SaRouter ,所有方法不变

+ * @author kong + * + */ +@Deprecated +public class SaRouterUtil { + + // -------------------- 路由匹配相关 -------------------- + + /** + * 校验指定路由匹配符是否可以匹配成功指定路径 + * @param pattern 路由匹配符 + * @param path 需要匹配的路径 + * @return 是否匹配成功 + */ + public static boolean isMatch(String pattern, String path) { + return SaManager.getSaTokenContext().matchPath(pattern, path); + } + + /** + * 校验指定路由匹配符是否可以匹配成功指定路径 + * @param patterns 路由匹配符 + * @param path 需要匹配的路径集合 + * @return 是否匹配成功 + */ + public static boolean isMatch(List 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, SaHolder.getRequest().getRequestPath()); + } + + /** + * 校验指定路由匹配符是否可以匹配成功当前URI + * @param patterns 路由匹配符 + * @return 是否匹配成功 + */ + public static boolean isMatchCurrURI(List patterns) { + return isMatch(patterns, SaHolder.getRequest().getRequestPath()); + } + + + // -------------------- 执行相关 -------------------- + + /** + * 使用路由匹配符与当前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 patterns, SaFunction function) { + if(isMatchCurrURI(patterns)) { + function.run(); + } + } + + /** + * 使用路由匹配符集合与当前URI执行匹配 (并指定排除匹配符),如果匹配成功则执行验证函数 + * @param patterns 路由匹配符集合 + * @param excludePatterns 要排除的路由匹配符集合 + * @param function 要执行的方法 + */ + public static void match(List patterns, List 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), SaHolder.getRequest().getRequestPath()); + return new IsRunFunction(matchResult); + } + + + // -------------------- 其它操作 -------------------- + + /** + * 停止匹配,跳出函数 (在多个匹配链中一次性跳出Auth函数) + */ + public static void stop() { + throw new StopMatchException(); + } + + + + +} diff --git a/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/SaTokenConfigure.java b/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/SaTokenConfigure.java index 43d3ab0c..66d9ba08 100644 --- a/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/SaTokenConfigure.java +++ b/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/SaTokenConfigure.java @@ -62,7 +62,7 @@ public class SaTokenConfigure implements WebMvcConfigurer { // 是否可以在iframe显示视图: DENY=不可以 | SAMEORIGIN=同域下可以 | ALLOW-FROM uri=指定域名下可以 .setHeader("X-Frame-Options", "SAMEORIGIN") // 是否启用浏览器默认XSS防护: 0=禁用 | 1=启用 | 1; mode=block 启用, 并在检查到XSS攻击时,停止渲染页面 - .setHeader("X-Frame-Options", "1; mode=block") + .setHeader("X-XSS-Protection", "1; mode=block") // 禁用浏览器内容嗅探 .setHeader("X-Content-Type-Options", "nosniff") ; diff --git a/sa-token-doc/doc/start/download.md b/sa-token-doc/doc/start/download.md index 63d25e27..ff036576 100644 --- a/sa-token-doc/doc/start/download.md +++ b/sa-token-doc/doc/start/download.md @@ -103,6 +103,7 @@ implementation 'cn.dev33:sa-token-core:1.19.0' ├── sa-token-demo-webflux // [示例] Sa-Token 整合 WebFlux ├── sa-token-demo-jwt // [示例] Sa-Token 集成 jwt ├── sa-token-demo-solon // [示例] Sa-Token 集成 Solon + ├── sa-token-demo-quick-login // [示例] Sa-Token 集成 quick-login 模块 ├── sa-token-demo-oauth2-server // [示例] Sa-Token 集成 OAuth2.0 (服务端) ├── sa-token-demo-oauth2-client // [示例] Sa-Token 集成 OAuth2.0 (客户端) ├── sa-token-doc // [文档] Sa-Token 开发文档 diff --git a/sa-token-doc/doc/use/global-filter.md b/sa-token-doc/doc/use/global-filter.md index a1ba6aa1..39ecf9f6 100644 --- a/sa-token-doc/doc/use/global-filter.md +++ b/sa-token-doc/doc/use/global-filter.md @@ -63,7 +63,7 @@ public class SaTokenConfigure { // 是否可以在iframe显示视图: DENY=不可以 | SAMEORIGIN=同域下可以 | ALLOW-FROM uri=指定域名下可以 .setHeader("X-Frame-Options", "SAMEORIGIN") // 是否启用浏览器默认XSS防护: 0=禁用 | 1=启用 | 1; mode=block 启用, 并在检查到XSS攻击时,停止渲染页面 - .setHeader("X-Frame-Options", "1; mode=block") + .setHeader("X-XSS-Protection", "1; mode=block") // 禁用浏览器内容嗅探 .setHeader("X-Content-Type-Options", "nosniff") ; diff --git a/sa-token-doc/index.html b/sa-token-doc/index.html index ee6f1de3..2b066ef8 100644 --- a/sa-token-doc/index.html +++ b/sa-token-doc/index.html @@ -251,6 +251,9 @@ + + +