From fdead8cfa68237e050733e5b99f27d8ced88d18a Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Thu, 25 Dec 2025 20:18:24 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E8=A1=A5=E5=85=A8=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sa-token-doc/api/sa-strategy.md | 136 +++++++++++++++++++++++++------- 1 file changed, 106 insertions(+), 30 deletions(-) diff --git a/sa-token-doc/api/sa-strategy.md b/sa-token-doc/api/sa-strategy.md index 23765d94..77e92a1d 100644 --- a/sa-token-doc/api/sa-strategy.md +++ b/sa-token-doc/api/sa-strategy.md @@ -4,7 +4,7 @@ SaStrategy-全局策略,核心逻辑的代理封装。 --- -### 所有策略 +### 核心策略 ``` java /** @@ -24,6 +24,11 @@ public Function createSession = (sessionId) -> { return new SaSession(sessionId); }; +/** + * 反序列化 SaSession 时默认指定的类型 + */ +public Class sessionClassType = SaSession.class; + /** * 判断:集合中是否包含指定元素(模糊匹配) *

参数 [集合, 元素] @@ -32,38 +37,14 @@ public BiFunction, String, Boolean> hasElement = (list, element) -> return false; }; -/** - * 对一个 [Method] 对象进行注解校验 (注解鉴权内部实现) - *

参数 [Method句柄] - */ -public Consumer checkMethodAnnotation = (method) -> { - // ... -}; /** - * 对一个 [元素] 对象进行注解校验 (注解鉴权内部实现) - *

参数 [element元素] + * 生成唯一式 token 的算法 + *

参数:元素名称, 最大尝试次数, 创建 token 函数, 检查 token 函数

*/ -public Consumer checkElementAnnotation = (target) -> { - // ... -}; - -/** - * 从元素上获取注解(注解鉴权内部实现) - *

参数 [element元素,要获取的注解类型] - */ -public BiFunction , Annotation> getAnnotation = (element, annotationClass)->{ - // 默认使用jdk的注解处理器 - return element.getAnnotation(annotationClass); -}; - -/** - * 拼接两个url - *

例如:url1=http://domain.cn,url2=/sso/auth,则返回:http://domain.cn/sso/auth - *

参数 [第一个url, 第二个url] - */ -public BiFunction spliceTwoUrl = (url1, url2) -> { - return xxx; +public SaGenerateUniqueTokenFunction generateUniqueToken = (elementName, maxTryTimes, createTokenFunction, checkTokenFunction) -> { + // ... + return "xxxxxx"; }; /** @@ -74,10 +55,105 @@ public BiFunction spliceTwoUrl = (url1, url2) -> { public Function autoRenew = (stpLogic) -> { return stpLogic.getConfigOrGlobal().getAutoRenew(); }; + +/** + * 创建 StpLogic 的算法 + *

参数:账号体系标识

+ *

返回:创建好的 StpLogic 对象

+ */ +public SaCreateStpLogicFunction createStpLogic = (loginType) -> { + return new StpLogic(loginType); +}; + +/** + * 路由匹配策略 + *

参数:pattern, path

+ *

返回:是否匹配

+ */ +public SaRouteMatchFunction routeMatcher = (pattern, path) -> { + return true; +}; + +/** + * CORS 策略处理函数 + *

参数:请求包装对象, 响应包装对象, 数据读写对象

+ */ +public SaCorsHandleFunction corsHandle = (req, res, sto) -> { + +}; +``` + + +### 注解操作相关策略 + +``` java +/** + * 对一个 [Method] 对象进行注解校验 (注解鉴权内部实现) + *

参数:Method句柄

+ *

返回:无

+ */ +public SaCheckMethodAnnotationFunction checkMethodAnnotation = (method) -> { + // ... +}; + +/** + * 对一个 [Element] 对象进行注解校验 (注解鉴权内部实现) + *

参数:element元素

+ *

返回:无

+ */ +@SuppressWarnings("unchecked") +public SaCheckElementAnnotationFunction checkElementAnnotation = (element) -> { + // ... +}; + +/** + * 从元素上获取注解 + *

参数:element元素,要获取的注解类型

+ *

返回:注解对象

+ */ +public SaGetAnnotationFunction getAnnotation = (element, annotationClass)->{ + return element.getAnnotation(annotationClass); +}; + +/** + * 判断一个 Method 或其所属 Class 是否包含指定注解 + *

参数:Method、注解

+ *

返回:是否包含

+ */ +public SaIsAnnotationPresentFunction isAnnotationPresent = (method, annotationClass) -> { + // ... + return false; +}; + +/** + * SaCheckELRootMap 扩展函数 + *

参数:SaCheckELRootMap 对象

+ */ +public SaCheckELRootMapExtendFunction checkELRootMapExtendFunction = rootMap -> { + // 默认不做任何处理 +}; ``` +### 防火墙相关策略 +``` java +/** + * 防火墙校验函数 + *

参数:请求对象、响应对象、预留扩展参数

+ */ +public SaFirewallCheckFunction check = (req, res, extArg) -> { + // ... +}; +/** + * 自定义当请求 path 校验不通过时地处理方案 + *

参数:防火墙校验异常、请求对象、响应对象、预留扩展参数

+ */ +SaFirewallStrategy.instance.checkFailHandle = (e, req, res, extArg) -> { + // 自定义处理逻辑 ... +}; +``` +参考:[防火墙](/fun/firewall)