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 @@
+
+
+