signMany) {
+ SaSignManager.signMany = signMany;
+ }
+
+ /**
+ * API 参数签名
+ */
+ private volatile static SaSignTemplate saSignTemplate;
+ public static void setSaSignTemplate(SaSignTemplate saSignTemplate) {
+ SaSignManager.saSignTemplate = saSignTemplate;
+ SaTokenEventCenter.doRegisterComponent("SaSignTemplate", saSignTemplate);
+ }
+ public static SaSignTemplate getSaSignTemplate() {
+ if (saSignTemplate == null) {
+ synchronized (SaManager.class) {
+ if (saSignTemplate == null) {
+ SaSignManager.saSignTemplate = new SaSignTemplate();
+ }
+ }
+ }
+ return saSignTemplate;
+ }
+
+}
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/annotation/SaCheckSign.java b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/annotation/SaCheckSign.java
similarity index 91%
rename from sa-token-core/src/main/java/cn/dev33/satoken/annotation/SaCheckSign.java
rename to sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/annotation/SaCheckSign.java
index 45f0eecc..511e3f85 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/annotation/SaCheckSign.java
+++ b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/annotation/SaCheckSign.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.dev33.satoken.annotation;
+package cn.dev33.satoken.sign.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -21,7 +21,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * 权限认证校验:必须具有正确的参数签名才可以通过校验
+ * API 参数签名校验:必须具有正确的参数签名才可以通过校验
*
* 可标注在方法、类上(效果等同于标注在此类的所有方法上)
*
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/annotation/handler/SaCheckSignHandler.java b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/annotation/handle/SaCheckSignHandler.java
similarity index 87%
rename from sa-token-core/src/main/java/cn/dev33/satoken/annotation/handler/SaCheckSignHandler.java
rename to sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/annotation/handle/SaCheckSignHandler.java
index fb00ade6..3348e370 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/annotation/handler/SaCheckSignHandler.java
+++ b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/annotation/handle/SaCheckSignHandler.java
@@ -13,12 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.dev33.satoken.annotation.handler;
+package cn.dev33.satoken.sign.annotation.handle;
-import cn.dev33.satoken.annotation.SaCheckSign;
+import cn.dev33.satoken.annotation.handler.SaAnnotationHandlerInterface;
+import cn.dev33.satoken.sign.annotation.SaCheckSign;
import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.context.model.SaRequest;
-import cn.dev33.satoken.sign.SaSignMany;
+import cn.dev33.satoken.sign.template.SaSignMany;
import java.lang.reflect.AnnotatedElement;
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaSignConfig.java b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/config/SaSignConfig.java
similarity index 99%
rename from sa-token-core/src/main/java/cn/dev33/satoken/config/SaSignConfig.java
rename to sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/config/SaSignConfig.java
index 6e83f5ad..dc848b05 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/config/SaSignConfig.java
+++ b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/config/SaSignConfig.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.dev33.satoken.config;
+package cn.dev33.satoken.sign.config;
import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.fun.SaParamRetFunction;
diff --git a/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/config/SaSignManyConfigWrapper.java b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/config/SaSignManyConfigWrapper.java
new file mode 100644
index 00000000..34739abd
--- /dev/null
+++ b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/config/SaSignManyConfigWrapper.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2020-2099 sa-token.cc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package cn.dev33.satoken.sign.config;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * SaSignManyConfig 配置包装类,以更方便框架完成属性注入操作
+ *
+ * @author click33
+ * @since 1.43.0
+ */
+public class SaSignManyConfigWrapper {
+
+ public Map signMany = new LinkedHashMap<>();
+
+ /**
+ * 获取
+ *
+ * @return signMany
+ */
+ public Map getSignMany() {
+ return this.signMany;
+ }
+
+ /**
+ * 设置
+ *
+ * @param signMany
+ */
+ public void setSignMany(Map signMany) {
+ this.signMany = signMany;
+ }
+
+ @Override
+ public String toString() {
+ return "SaSignManyConfigWrapper{" +
+ "signMany=" + signMany +
+ '}';
+ }
+
+}
\ No newline at end of file
diff --git a/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/error/SaSignErrorCode.java b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/error/SaSignErrorCode.java
new file mode 100644
index 00000000..e4571356
--- /dev/null
+++ b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/error/SaSignErrorCode.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2020-2099 sa-token.cc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package cn.dev33.satoken.sign.error;
+
+/**
+ * 定义 sa-token-sign 模块所有异常细分状态码
+ *
+ * @author click33
+ * @since 1.43.0
+ */
+public interface SaSignErrorCode {
+
+ /** 参与参数签名的秘钥不可为空 */
+ int CODE_12201 = 12201;
+
+ /** 给定的签名无效 */
+ int CODE_12202 = 12202;
+
+ /** timestamp 超出允许的范围 */
+ int CODE_12203 = 12203;
+
+ /** 未找到对应 appid 的 SaSignConfig */
+ int CODE_12211 = 12211;
+
+}
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/exception/SaSignException.java b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/exception/SaSignException.java
similarity index 96%
rename from sa-token-core/src/main/java/cn/dev33/satoken/exception/SaSignException.java
rename to sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/exception/SaSignException.java
index da8da8bb..8c170575 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/exception/SaSignException.java
+++ b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/exception/SaSignException.java
@@ -13,8 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.dev33.satoken.exception;
+package cn.dev33.satoken.sign.exception;
+import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.util.SaFoxUtil;
/**
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/sign/SaSignMany.java b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/template/SaSignMany.java
similarity index 79%
rename from sa-token-core/src/main/java/cn/dev33/satoken/sign/SaSignMany.java
rename to sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/template/SaSignMany.java
index 0bf39de6..cf9c8e56 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/sign/SaSignMany.java
+++ b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/template/SaSignMany.java
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.dev33.satoken.sign;
+package cn.dev33.satoken.sign.template;
-import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.config.SaSignConfig;
-import cn.dev33.satoken.error.SaErrorCode;
-import cn.dev33.satoken.exception.SaSignException;
import cn.dev33.satoken.fun.SaParamRetFunction;
+import cn.dev33.satoken.sign.SaSignManager;
+import cn.dev33.satoken.sign.config.SaSignConfig;
+import cn.dev33.satoken.sign.error.SaSignErrorCode;
+import cn.dev33.satoken.sign.exception.SaSignException;
import cn.dev33.satoken.util.SaFoxUtil;
/**
@@ -34,7 +34,7 @@ public class SaSignMany {
* 根据 appid 获取 SaSignConfig,允许自定义
*/
public static SaParamRetFunction findSaSignConfigMethod = (appid) -> {
- return SaManager.getConfig().getSignMany().get(appid);
+ return SaSignManager.getSignMany().get(appid);
};
/**
@@ -46,13 +46,13 @@ public class SaSignMany {
// appid 为空,返回全局默认 SaSignTemplate
if(SaFoxUtil.isEmpty(appid)){
- return SaManager.getSaSignTemplate();
+ return SaSignManager.getSaSignTemplate();
}
// 获取 SaSignConfig
SaSignConfig config = findSaSignConfigMethod.run(appid);
if(config == null){
- throw new SaSignException("未找到签名配置,appid=" + appid).setCode(SaErrorCode.CODE_12211);
+ throw new SaSignException("未找到签名配置,appid=" + appid).setCode(SaSignErrorCode.CODE_12211);
}
// 创建 SaSignTemplate 并返回
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/sign/SaSignTemplate.java b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/template/SaSignTemplate.java
similarity index 96%
rename from sa-token-core/src/main/java/cn/dev33/satoken/sign/SaSignTemplate.java
rename to sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/template/SaSignTemplate.java
index bdf0bfac..69ac90f5 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/sign/SaSignTemplate.java
+++ b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/template/SaSignTemplate.java
@@ -13,13 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.dev33.satoken.sign;
+package cn.dev33.satoken.sign.template;
import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.config.SaSignConfig;
import cn.dev33.satoken.context.model.SaRequest;
import cn.dev33.satoken.error.SaErrorCode;
-import cn.dev33.satoken.exception.SaSignException;
+import cn.dev33.satoken.sign.error.SaSignErrorCode;
+import cn.dev33.satoken.sign.exception.SaSignException;
+import cn.dev33.satoken.sign.SaSignManager;
+import cn.dev33.satoken.sign.config.SaSignConfig;
import cn.dev33.satoken.util.SaFoxUtil;
import java.util.Map;
@@ -79,7 +81,7 @@ public class SaSignTemplate {
return signConfig;
}
// 否则使用全局默认配置
- return SaManager.getConfig().getSign();
+ return SaSignManager.getConfig();
}
/**
@@ -160,7 +162,7 @@ public class SaSignTemplate {
*/
public String createSign(Map paramsMap) {
String secretKey = getSecretKey();
- SaSignException.notEmpty(secretKey, "参与参数签名的秘钥不可为空", SaErrorCode.CODE_12201);
+ SaSignException.notEmpty(secretKey, "参与参数签名的秘钥不可为空", SaSignErrorCode.CODE_12201);
// 如果调用者不小心传入了 sign 参数,则此处需要将 sign 参数排除在外
if(paramsMap.containsKey(sign)) {
@@ -237,7 +239,7 @@ public class SaSignTemplate {
*/
public void checkTimestamp(long timestamp) {
if( ! isValidTimestamp(timestamp) ) {
- throw new SaSignException("timestamp 超出允许的范围:" + timestamp).setCode(SaErrorCode.CODE_12203);
+ throw new SaSignException("timestamp 超出允许的范围:" + timestamp).setCode(SaSignErrorCode.CODE_12203);
}
}
@@ -297,7 +299,7 @@ public class SaSignTemplate {
*/
public void checkSign(Map paramsMap, String sign) {
if( ! isValidSign(paramsMap, sign) ) {
- throw new SaSignException("无效签名:" + sign).setCode(SaErrorCode.CODE_12202);
+ throw new SaSignException("无效签名:" + sign).setCode(SaSignErrorCode.CODE_12202);
}
}
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/sign/SaSignUtil.java b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/template/SaSignUtil.java
similarity index 81%
rename from sa-token-core/src/main/java/cn/dev33/satoken/sign/SaSignUtil.java
rename to sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/template/SaSignUtil.java
index 810b8977..9ac9657d 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/sign/SaSignUtil.java
+++ b/sa-token-plugin/sa-token-sign/src/main/java/cn/dev33/satoken/sign/template/SaSignUtil.java
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.dev33.satoken.sign;
+package cn.dev33.satoken.sign.template;
-import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.context.model.SaRequest;
+import cn.dev33.satoken.sign.SaSignManager;
import java.util.Map;
@@ -36,7 +36,7 @@ public class SaSignUtil {
* @return 拼接出的参数字符串
*/
public static String joinParams(Map paramsMap) {
- return SaManager.getSaSignTemplate().joinParams(paramsMap);
+ return SaSignManager.getSaSignTemplate().joinParams(paramsMap);
}
/**
@@ -45,7 +45,7 @@ public class SaSignUtil {
* @return 拼接出的参数字符串
*/
public static String joinParamsDictSort(Map paramsMap) {
- return SaManager.getSaSignTemplate().joinParamsDictSort(paramsMap);
+ return SaSignManager.getSaSignTemplate().joinParamsDictSort(paramsMap);
}
@@ -57,7 +57,7 @@ public class SaSignUtil {
* @return 签名
*/
public static String createSign(Map paramsMap) {
- return SaManager.getSaSignTemplate().createSign(paramsMap);
+ return SaSignManager.getSaSignTemplate().createSign(paramsMap);
}
/**
@@ -66,7 +66,7 @@ public class SaSignUtil {
* @return 加工后的参数列表
*/
public static Map addSignParams(Map paramsMap) {
- return SaManager.getSaSignTemplate().addSignParams(paramsMap);
+ return SaSignManager.getSaSignTemplate().addSignParams(paramsMap);
}
/**
@@ -76,7 +76,7 @@ public class SaSignUtil {
* @return 加工后的参数列表 转化为的参数字符串
*/
public static String addSignParamsAndJoin(Map paramsMap) {
- return SaManager.getSaSignTemplate().addSignParamsAndJoin(paramsMap);
+ return SaSignManager.getSaSignTemplate().addSignParamsAndJoin(paramsMap);
}
@@ -88,7 +88,7 @@ public class SaSignUtil {
* @return 是否在允许的范围内
*/
public static boolean isValidTimestamp(long timestamp) {
- return SaManager.getSaSignTemplate().isValidTimestamp(timestamp);
+ return SaSignManager.getSaSignTemplate().isValidTimestamp(timestamp);
}
/**
@@ -96,7 +96,7 @@ public class SaSignUtil {
* @param timestamp 待校验的时间戳
*/
public static void checkTimestamp(long timestamp) {
- SaManager.getSaSignTemplate().checkTimestamp(timestamp);
+ SaSignManager.getSaSignTemplate().checkTimestamp(timestamp);
}
/**
@@ -106,7 +106,7 @@ public class SaSignUtil {
* @return 是否有效
*/
public static boolean isValidNonce(String nonce) {
- return SaManager.getSaSignTemplate().isValidNonce(nonce);
+ return SaSignManager.getSaSignTemplate().isValidNonce(nonce);
}
/**
@@ -115,7 +115,7 @@ public class SaSignUtil {
* @param nonce 待校验的随机字符串
*/
public static void checkNonce(String nonce) {
- SaManager.getSaSignTemplate().checkNonce(nonce);
+ SaSignManager.getSaSignTemplate().checkNonce(nonce);
}
/**
@@ -125,7 +125,7 @@ public class SaSignUtil {
* @return 签名是否有效
*/
public static boolean isValidSign(Map paramsMap, String sign) {
- return SaManager.getSaSignTemplate().isValidSign(paramsMap, sign);
+ return SaSignManager.getSaSignTemplate().isValidSign(paramsMap, sign);
}
/**
@@ -134,7 +134,7 @@ public class SaSignUtil {
* @param sign 待验证的签名
*/
public static void checkSign(Map paramsMap, String sign) {
- SaManager.getSaSignTemplate().checkSign(paramsMap, sign);
+ SaSignManager.getSaSignTemplate().checkSign(paramsMap, sign);
}
/**
@@ -143,7 +143,7 @@ public class SaSignUtil {
* @return 是否合法
*/
public static boolean isValidParamMap(Map paramMap) {
- return SaManager.getSaSignTemplate().isValidParamMap(paramMap);
+ return SaSignManager.getSaSignTemplate().isValidParamMap(paramMap);
}
/**
@@ -151,7 +151,7 @@ public class SaSignUtil {
* @param paramMap 待校验的请求参数集合
*/
public static void checkParamMap(Map paramMap) {
- SaManager.getSaSignTemplate().checkParamMap(paramMap);
+ SaSignManager.getSaSignTemplate().checkParamMap(paramMap);
}
@@ -164,7 +164,7 @@ public class SaSignUtil {
* @return 是否合法
*/
public static boolean isValidRequest(SaRequest request, String... paramNames) {
- return SaManager.getSaSignTemplate().isValidRequest(request, paramNames);
+ return SaSignManager.getSaSignTemplate().isValidRequest(request, paramNames);
}
/**
@@ -173,7 +173,7 @@ public class SaSignUtil {
* @param paramNames 指定参与签名的参数有哪些,如果不填写则默认为全部参数
*/
public static void checkRequest(SaRequest request, String... paramNames) {
- SaManager.getSaSignTemplate().checkRequest(request, paramNames);
+ SaSignManager.getSaSignTemplate().checkRequest(request, paramNames);
}
}
diff --git a/sa-token-plugin/sa-token-sign/src/main/resources/META-INF/satoken/cn.dev33.satoken.plugin.SaTokenPlugin b/sa-token-plugin/sa-token-sign/src/main/resources/META-INF/satoken/cn.dev33.satoken.plugin.SaTokenPlugin
new file mode 100644
index 00000000..68cd70d7
--- /dev/null
+++ b/sa-token-plugin/sa-token-sign/src/main/resources/META-INF/satoken/cn.dev33.satoken.plugin.SaTokenPlugin
@@ -0,0 +1 @@
+cn.dev33.satoken.plugin.SaTokenPluginForSign
\ No newline at end of file
diff --git a/sa-token-plugin/sa-token-sso/pom.xml b/sa-token-plugin/sa-token-sso/pom.xml
index 3a4cb94c..32457cc5 100644
--- a/sa-token-plugin/sa-token-sso/pom.xml
+++ b/sa-token-plugin/sa-token-sso/pom.xml
@@ -22,6 +22,11 @@
cn.dev33
sa-token-core
+
+
+ cn.dev33
+ sa-token-sign
+
diff --git a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/template/SaSsoClientTemplate.java b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/template/SaSsoClientTemplate.java
index 12d59981..7e2abbd6 100644
--- a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/template/SaSsoClientTemplate.java
+++ b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/template/SaSsoClientTemplate.java
@@ -16,8 +16,9 @@
package cn.dev33.satoken.sso.template;
import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.config.SaSignConfig;
-import cn.dev33.satoken.sign.SaSignTemplate;
+import cn.dev33.satoken.sign.SaSignManager;
+import cn.dev33.satoken.sign.config.SaSignConfig;
+import cn.dev33.satoken.sign.template.SaSignTemplate;
import cn.dev33.satoken.sso.SaSsoManager;
import cn.dev33.satoken.sso.config.SaSsoClientConfig;
import cn.dev33.satoken.sso.error.SaSsoErrorCode;
@@ -246,7 +247,7 @@ public class SaSsoClientTemplate extends SaSsoTemplate {
* @return /
*/
public SaSignTemplate getSignTemplate() {
- SaSignConfig signConfig = SaManager.getSaSignTemplate().getSignConfigOrGlobal().copy();
+ SaSignConfig signConfig = SaSignManager.getSaSignTemplate().getSignConfigOrGlobal().copy();
// 使用 secretKey 的优先级:SSO 模块全局配置 > sign 模块默认配置
String secretKey = getClientConfig().getSecretKey();
diff --git a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/template/SaSsoServerTemplate.java b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/template/SaSsoServerTemplate.java
index cf5693c1..e4b16b81 100644
--- a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/template/SaSsoServerTemplate.java
+++ b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/template/SaSsoServerTemplate.java
@@ -16,9 +16,10 @@
package cn.dev33.satoken.sso.template;
import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.config.SaSignConfig;
import cn.dev33.satoken.session.SaSession;
-import cn.dev33.satoken.sign.SaSignTemplate;
+import cn.dev33.satoken.sign.SaSignManager;
+import cn.dev33.satoken.sign.config.SaSignConfig;
+import cn.dev33.satoken.sign.template.SaSignTemplate;
import cn.dev33.satoken.sso.SaSsoManager;
import cn.dev33.satoken.sso.config.SaSsoClientModel;
import cn.dev33.satoken.sso.config.SaSsoServerConfig;
@@ -327,7 +328,7 @@ public class SaSsoServerTemplate extends SaSsoTemplate {
scm.setIsSlo(serverConfig.getIsSlo());
scm.setSecretKey(serverConfig.getSecretKey());
if(SaFoxUtil.isEmpty(scm.getSecretKey())) {
- scm.setSecretKey(SaManager.getSaSignTemplate().getSignConfigOrGlobal().getSecretKey());
+ scm.setSecretKey(SaSignManager.getSaSignTemplate().getSignConfigOrGlobal().getSecretKey());
}
return scm;
}
@@ -781,7 +782,7 @@ public class SaSsoServerTemplate extends SaSsoTemplate {
* @return /
*/
public SaSignTemplate getSignTemplate(String client) {
- SaSignConfig signConfig = SaManager.getSaSignTemplate().getSignConfigOrGlobal().copy();
+ SaSignConfig signConfig = SaSignManager.getSaSignTemplate().getSignConfigOrGlobal().copy();
SaSsoClientModel clientModel = getClientNotNull(client);
// 使用 secretKey 的优先级:client 单独配置 > SSO 模块全局配置 > sign 模块默认配置
diff --git a/sa-token-starter/sa-token-solon-plugin/pom.xml b/sa-token-starter/sa-token-solon-plugin/pom.xml
index 5d737654..4ffe72c7 100644
--- a/sa-token-starter/sa-token-solon-plugin/pom.xml
+++ b/sa-token-starter/sa-token-solon-plugin/pom.xml
@@ -42,6 +42,20 @@
true
+
+
+ cn.dev33
+ sa-token-apikey
+ true
+
+
+
+
+ cn.dev33
+ sa-token-sign
+ true
+
+
org.noear
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaBeanInject.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaBeanInject.java
index 44dcffc3..d8ada245 100644
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaBeanInject.java
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaBeanInject.java
@@ -17,8 +17,6 @@ package cn.dev33.satoken.solon;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.annotation.handler.SaAnnotationHandlerInterface;
-import cn.dev33.satoken.apikey.SaApiKeyTemplate;
-import cn.dev33.satoken.apikey.loader.SaApiKeyDataLoader;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.context.SaTokenContext;
import cn.dev33.satoken.dao.SaTokenDao;
@@ -37,7 +35,6 @@ import cn.dev33.satoken.plugin.SaTokenPluginHolder;
import cn.dev33.satoken.same.SaSameTemplate;
import cn.dev33.satoken.secure.totp.SaTotpTemplate;
import cn.dev33.satoken.serializer.SaSerializerTemplate;
-import cn.dev33.satoken.sign.SaSignTemplate;
import cn.dev33.satoken.stp.StpInterface;
import cn.dev33.satoken.stp.StpLogic;
import cn.dev33.satoken.stp.StpUtil;
@@ -222,39 +219,6 @@ public class SaBeanInject {
SaManager.setSaSerializerTemplate(saSerializerTemplate);
}
- /**
- * 注入自定义的 参数签名 Bean
- *
- * @param saSignTemplate 参数签名 Bean
- */
- @Condition(onBean = SaSignTemplate.class)
- @Bean
- public void setSaSignTemplate(SaSignTemplate saSignTemplate) {
- SaManager.setSaSignTemplate(saSignTemplate);
- }
-
- /**
- * 注入自定义的 ApiKey 模块 Bean
- *
- * @param apiKeyTemplate /
- */
- @Condition(onBean = SaApiKeyTemplate.class)
- @Bean
- public void setSaApiKeyTemplate(SaApiKeyTemplate apiKeyTemplate) {
- SaManager.setSaApiKeyTemplate(apiKeyTemplate);
- }
-
- /**
- * 注入自定义的 ApiKey 数据加载器 Bean
- *
- * @param apiKeyDataLoader /
- */
- @Condition(onBean = SaApiKeyDataLoader.class)
- @Bean
- public void setSaApiKeyDataLoader(SaApiKeyDataLoader apiKeyDataLoader) {
- SaManager.setSaApiKeyDataLoader(apiKeyDataLoader);
- }
-
/**
* 注入自定义的 TOTP 算法 Bean
*
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaSolonPlugin.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaSolonPlugin.java
index 67ddd9db..f530902e 100644
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaSolonPlugin.java
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaSolonPlugin.java
@@ -15,8 +15,12 @@
*/
package cn.dev33.satoken.solon;
+import cn.dev33.satoken.solon.apikey.SaApiKeyBeanInject;
+import cn.dev33.satoken.solon.apikey.SaApiKeyBeanRegister;
import cn.dev33.satoken.solon.oauth2.SaOAuth2BeanInject;
import cn.dev33.satoken.solon.oauth2.SaOAuth2BeanRegister;
+import cn.dev33.satoken.solon.sign.SaSignBeanInject;
+import cn.dev33.satoken.solon.sign.SaSignBeanRegister;
import cn.dev33.satoken.solon.sso.SaSsoBeanInject;
import cn.dev33.satoken.solon.sso.SaSsoBeanRegister;
import org.noear.solon.core.AppContext;
@@ -30,16 +34,24 @@ public class SaSolonPlugin implements Plugin {
@Override
public void start(AppContext context) {
- //sa-token
+ // sa-token
context.beanMake(SaBeanRegister.class);
context.beanMake(SaBeanInject.class);
- //sa-sso
+ // sa-sso
context.beanMake(SaSsoBeanRegister.class);
context.beanMake(SaSsoBeanInject.class);
- //sa-oauth2
+ // sa-oauth2
context.beanMake(SaOAuth2BeanRegister.class);
context.beanMake(SaOAuth2BeanInject.class);
+
+ // sa-apikey
+ context.beanMake(SaApiKeyBeanRegister.class);
+ context.beanMake(SaApiKeyBeanInject.class);
+
+ // sa-sign
+ context.beanMake(SaSignBeanRegister.class);
+ context.beanMake(SaSignBeanInject.class);
}
}
\ No newline at end of file
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/apikey/SaApiKeyBeanInject.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/apikey/SaApiKeyBeanInject.java
new file mode 100644
index 00000000..5ad618fa
--- /dev/null
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/apikey/SaApiKeyBeanInject.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2020-2099 sa-token.cc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package cn.dev33.satoken.solon.apikey;
+
+import cn.dev33.satoken.apikey.SaApiKeyManager;
+import cn.dev33.satoken.apikey.config.SaApiKeyConfig;
+import cn.dev33.satoken.apikey.loader.SaApiKeyDataLoader;
+import cn.dev33.satoken.apikey.template.SaApiKeyTemplate;
+import org.noear.solon.annotation.Bean;
+import org.noear.solon.annotation.Condition;
+import org.noear.solon.annotation.Configuration;
+
+/**
+ * 注入 Sa-Token API Key 所需要的 Bean
+ *
+ * @author click33
+ * @since 1.43.0
+ */
+@Condition(onClass=SaApiKeyManager.class)
+@Configuration
+public class SaApiKeyBeanInject {
+
+ /**
+ * 注入 API Key 配置对象
+ *
+ * @param saApiKeyConfig 配置对象
+ */
+ @Bean
+ @Condition(onBean = SaApiKeyConfig.class)
+ public void setSaApiKeyConfig(SaApiKeyConfig saApiKeyConfig) {
+ SaApiKeyManager.setConfig(saApiKeyConfig);
+ }
+
+ /**
+ * 注入自定义的 API Key 模版方法 Bean
+ *
+ * @param apiKeyTemplate /
+ */
+ @Bean
+ @Condition(onBean = SaApiKeyTemplate.class)
+ public void setSaApiKeyTemplate(SaApiKeyTemplate apiKeyTemplate) {
+ SaApiKeyManager.setSaApiKeyTemplate(apiKeyTemplate);
+ }
+
+ /**
+ * 注入自定义的 API Key 数据加载器 Bean
+ *
+ * @param apiKeyDataLoader /
+ */
+ @Bean
+ @Condition(onBean = SaApiKeyDataLoader.class)
+ public void setSaApiKeyDataLoader(SaApiKeyDataLoader apiKeyDataLoader) {
+ SaApiKeyManager.setSaApiKeyDataLoader(apiKeyDataLoader);
+ }
+
+}
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/apikey/SaApiKeyBeanRegister.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/apikey/SaApiKeyBeanRegister.java
new file mode 100644
index 00000000..4a007c5b
--- /dev/null
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/apikey/SaApiKeyBeanRegister.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2020-2099 sa-token.cc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package cn.dev33.satoken.solon.apikey;
+
+import cn.dev33.satoken.apikey.SaApiKeyManager;
+import cn.dev33.satoken.apikey.config.SaApiKeyConfig;
+import org.noear.solon.annotation.Bean;
+import org.noear.solon.annotation.Condition;
+import org.noear.solon.annotation.Configuration;
+import org.noear.solon.annotation.Inject;
+
+/**
+ * 注册 Sa-Token API Key 所需要的 Bean
+ *
+ * @author click33
+ * @since 1.43.0
+ */
+@Configuration
+@Condition(onClass= SaApiKeyManager.class)
+public class SaApiKeyBeanRegister {
+
+ /**
+ * 获取 API Key 配置对象
+ * @return 配置对象
+ */
+ @Bean
+ public SaApiKeyConfig getSaApiKeyConfig(@Inject(value = "${sa-token.api-key}", required = false) SaApiKeyConfig saApiKeyConfig) {
+ if (saApiKeyConfig == null) {
+ return new SaApiKeyConfig();
+ } else {
+ return saApiKeyConfig;
+ }
+ }
+
+}
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sign/SaSignBeanInject.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sign/SaSignBeanInject.java
new file mode 100644
index 00000000..bf546450
--- /dev/null
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sign/SaSignBeanInject.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2020-2099 sa-token.cc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package cn.dev33.satoken.solon.sign;
+
+import cn.dev33.satoken.sign.SaSignManager;
+import cn.dev33.satoken.sign.config.SaSignConfig;
+import cn.dev33.satoken.sign.config.SaSignManyConfigWrapper;
+import cn.dev33.satoken.sign.template.SaSignTemplate;
+import org.noear.solon.annotation.Bean;
+import org.noear.solon.annotation.Condition;
+import org.noear.solon.annotation.Configuration;
+
+/**
+ * 注入 Sa-Token API 参数签名 所需要的 Bean
+ *
+ * @author click33
+ * @since 1.43.0
+ */
+@Configuration
+@Condition(onClass= SaSignManager.class)
+public class SaSignBeanInject {
+
+ /**
+ * 注入 API 参数签名配置对象
+ *
+ * @param saSignConfig 配置对象
+ */
+ @Bean
+ @Condition(onBean = SaSignConfig.class)
+ public void setSignConfig(SaSignConfig saSignConfig) {
+ SaSignManager.setConfig(saSignConfig);
+ }
+
+ /**
+ * 注入 API 参数签名配置对象
+ *
+ * @param signManyConfigWrapper 配置对象
+ */
+ @Bean
+ @Condition(onBean = SaSignManyConfigWrapper.class)
+ public void setSignManyConfig(SaSignManyConfigWrapper signManyConfigWrapper) {
+ SaSignManager.setSignMany(signManyConfigWrapper.getSignMany());
+ }
+
+ /**
+ * 注入自定义的 参数签名 模版方法 Bean
+ *
+ * @param saSignTemplate 参数签名 Bean
+ */
+ @Bean
+ @Condition(onBean = SaSignTemplate.class)
+ public void setSaSignTemplate(SaSignTemplate saSignTemplate) {
+ SaSignManager.setSaSignTemplate(saSignTemplate);
+ }
+
+}
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sign/SaSignBeanRegister.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sign/SaSignBeanRegister.java
new file mode 100644
index 00000000..de451901
--- /dev/null
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sign/SaSignBeanRegister.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2020-2099 sa-token.cc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package cn.dev33.satoken.solon.sign;
+
+import cn.dev33.satoken.sign.SaSignManager;
+import cn.dev33.satoken.sign.config.SaSignConfig;
+import cn.dev33.satoken.sign.config.SaSignManyConfigWrapper;
+import org.noear.solon.annotation.Bean;
+import org.noear.solon.annotation.Condition;
+import org.noear.solon.annotation.Configuration;
+import org.noear.solon.annotation.Inject;
+
+/**
+ * 注册 Sa-Token API 参数签名所需要的 Bean
+ *
+ * @author click33
+ * @since 1.43.0
+ */
+@Configuration
+@Condition(onClass= SaSignManager.class)
+public class SaSignBeanRegister {
+
+ /**
+ * 获取 API 参数签名配置对象
+ * @return 配置对象
+ */
+ @Bean
+ public SaSignConfig getSaSignConfig(@Inject(value = "${sa-token.sign}", required = false) SaSignConfig saSignConfig) {
+ if (saSignConfig == null) {
+ return new SaSignConfig();
+ } else {
+ return saSignConfig;
+ }
+ }
+
+ /**
+ * 获取 API 参数签名 Many 配置对象
+ * @return 配置对象
+ */
+ @Bean
+ public SaSignManyConfigWrapper getSaSignManyConfigWrapper(@Inject(value = "${sa-token}", required = false) SaSignManyConfigWrapper signManyConfigWrapper) {
+ if (signManyConfigWrapper == null) {
+ return new SaSignManyConfigWrapper();
+ } else {
+ return signManyConfigWrapper;
+ }
+ }
+
+}
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sso/SaSsoBeanRegister.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sso/SaSsoBeanRegister.java
index cec1fa61..608e4061 100644
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sso/SaSsoBeanRegister.java
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sso/SaSsoBeanRegister.java
@@ -43,7 +43,7 @@ public class SaSsoBeanRegister {
* @return 配置对象
*/
@Bean
- public SaSsoServerConfig getSaSsoServerConfig(@Inject(value = "${sa-token.sso-server)", required = false) SaSsoServerConfig serverConfig) {
+ public SaSsoServerConfig getSaSsoServerConfig(@Inject(value = "${sa-token.sso-server}", required = false) SaSsoServerConfig serverConfig) {
if (serverConfig == null) {
return new SaSsoServerConfig();
} else {
diff --git a/sa-token-starter/sa-token-spring-boot-autoconfig/pom.xml b/sa-token-starter/sa-token-spring-boot-autoconfig/pom.xml
index 87af2ee7..23e02945 100644
--- a/sa-token-starter/sa-token-spring-boot-autoconfig/pom.xml
+++ b/sa-token-starter/sa-token-spring-boot-autoconfig/pom.xml
@@ -70,6 +70,13 @@
true
+
+
+ cn.dev33
+ sa-token-sign
+ true
+
+
diff --git a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/SaBeanInject.java b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/SaBeanInject.java
index a7b743a5..326f8676 100644
--- a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/SaBeanInject.java
+++ b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/SaBeanInject.java
@@ -35,7 +35,6 @@ import cn.dev33.satoken.plugin.SaTokenPluginHolder;
import cn.dev33.satoken.same.SaSameTemplate;
import cn.dev33.satoken.secure.totp.SaTotpTemplate;
import cn.dev33.satoken.serializer.SaSerializerTemplate;
-import cn.dev33.satoken.sign.SaSignTemplate;
import cn.dev33.satoken.spring.pathmatch.SaPathMatcherHolder;
import cn.dev33.satoken.stp.StpInterface;
import cn.dev33.satoken.stp.StpLogic;
@@ -207,16 +206,6 @@ public class SaBeanInject {
SaManager.setSaSerializerTemplate(saSerializerTemplate);
}
- /**
- * 注入自定义的 参数签名 Bean
- *
- * @param saSignTemplate 参数签名 Bean
- */
- @Autowired(required = false)
- public void setSaSignTemplate(SaSignTemplate saSignTemplate) {
- SaManager.setSaSignTemplate(saSignTemplate);
- }
-
/**
* 注入自定义的 TOTP 算法 Bean
*
diff --git a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/apikey/SaApiKeyBeanInject.java b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/apikey/SaApiKeyBeanInject.java
index 3579f8d7..fda6a507 100644
--- a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/apikey/SaApiKeyBeanInject.java
+++ b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/apikey/SaApiKeyBeanInject.java
@@ -37,7 +37,7 @@ public class SaApiKeyBeanInject {
* @param saApiKeyConfig 配置对象
*/
@Autowired(required = false)
- public void setSaOAuth2Config(SaApiKeyConfig saApiKeyConfig) {
+ public void setSaApiKeyConfig(SaApiKeyConfig saApiKeyConfig) {
SaApiKeyManager.setConfig(saApiKeyConfig);
}
diff --git a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/apikey/SaApiKeyBeanRegister.java b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/apikey/SaApiKeyBeanRegister.java
index 2212c323..d6414514 100644
--- a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/apikey/SaApiKeyBeanRegister.java
+++ b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/apikey/SaApiKeyBeanRegister.java
@@ -25,7 +25,7 @@ import org.springframework.context.annotation.Bean;
* 注册 Sa-Token API Key 所需要的 Bean
*
* @author click33
- * @since 1.34.0
+ * @since 1.43.0
*/
@ConditionalOnClass(SaApiKeyManager.class)
public class SaApiKeyBeanRegister {
diff --git a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/sign/SaSignBeanInject.java b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/sign/SaSignBeanInject.java
new file mode 100644
index 00000000..8944e2a1
--- /dev/null
+++ b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/sign/SaSignBeanInject.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2020-2099 sa-token.cc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package cn.dev33.satoken.spring.sign;
+
+import cn.dev33.satoken.sign.SaSignManager;
+import cn.dev33.satoken.sign.config.SaSignConfig;
+import cn.dev33.satoken.sign.config.SaSignManyConfigWrapper;
+import cn.dev33.satoken.sign.template.SaSignTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+
+/**
+ * 注入 Sa-Token API 参数签名 所需要的 Bean
+ *
+ * @author click33
+ * @since 1.43.0
+ */
+@ConditionalOnClass(SaSignManager.class)
+public class SaSignBeanInject {
+
+ /**
+ * 注入 API 参数签名配置对象
+ *
+ * @param saSignConfig 配置对象
+ */
+ @Autowired(required = false)
+ public void setSignConfig(SaSignConfig saSignConfig) {
+ SaSignManager.setConfig(saSignConfig);
+ }
+
+ /**
+ * 注入 API 参数签名配置对象
+ *
+ * @param signManyConfigWrapper 配置对象
+ */
+ @Autowired(required = false)
+ public void setSignManyConfig(SaSignManyConfigWrapper signManyConfigWrapper) {
+ SaSignManager.setSignMany(signManyConfigWrapper.getSignMany());
+ }
+
+ /**
+ * 注入自定义的 参数签名 模版方法 Bean
+ *
+ * @param saSignTemplate 参数签名 Bean
+ */
+ @Autowired(required = false)
+ public void setSaSignTemplate(SaSignTemplate saSignTemplate) {
+ SaSignManager.setSaSignTemplate(saSignTemplate);
+ }
+
+}
diff --git a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/sign/SaSignBeanRegister.java b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/sign/SaSignBeanRegister.java
new file mode 100644
index 00000000..a6e740d2
--- /dev/null
+++ b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/sign/SaSignBeanRegister.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2020-2099 sa-token.cc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package cn.dev33.satoken.spring.sign;
+
+import cn.dev33.satoken.sign.SaSignManager;
+import cn.dev33.satoken.sign.config.SaSignConfig;
+import cn.dev33.satoken.sign.config.SaSignManyConfigWrapper;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+
+/**
+ * 注册 Sa-Token API 参数签名所需要的 Bean
+ *
+ * @author click33
+ * @since 1.43.0
+ */
+@ConditionalOnClass(SaSignManager.class)
+public class SaSignBeanRegister {
+
+ /**
+ * 获取 API 参数签名配置对象
+ * @return 配置对象
+ */
+ @Bean
+ @ConfigurationProperties(prefix = "sa-token.sign")
+ public SaSignConfig getSaSignConfig() {
+ return new SaSignConfig();
+ }
+
+ /**
+ * 获取 API 参数签名 Many 配置对象
+ * @return 配置对象
+ */
+ @Bean
+ @ConfigurationProperties(prefix = "sa-token")
+ public SaSignManyConfigWrapper getSaSignManyConfigWrapper() {
+ return new SaSignManyConfigWrapper();
+ }
+
+}
diff --git a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/sign/package-info.java b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/sign/package-info.java
new file mode 100644
index 00000000..be4e2f90
--- /dev/null
+++ b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/java/cn/dev33/satoken/spring/sign/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2020-2099 sa-token.cc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * sa-token-sign 模块自动化配置(只有引入了 sa-token-sign 模块后,此包下的代码才会开始工作)
+ */
+package cn.dev33.satoken.spring.sign;
\ No newline at end of file
diff --git a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/resources/META-INF/spring.factories b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/resources/META-INF/spring.factories
index d092a911..d592afc2 100644
--- a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/resources/META-INF/spring.factories
+++ b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/resources/META-INF/spring.factories
@@ -4,4 +4,8 @@ cn.dev33.satoken.spring.SaBeanInject,\
cn.dev33.satoken.spring.sso.SaSsoBeanRegister,\
cn.dev33.satoken.spring.sso.SaSsoBeanInject,\
cn.dev33.satoken.spring.oauth2.SaOAuth2BeanRegister,\
-cn.dev33.satoken.spring.oauth2.SaOAuth2BeanInject
\ No newline at end of file
+cn.dev33.satoken.spring.oauth2.SaOAuth2BeanInject,\
+cn.dev33.satoken.spring.apikey.SaApiKeyBeanRegister,\
+cn.dev33.satoken.spring.apikey.SaApiKeyBeanInject,\
+cn.dev33.satoken.spring.sign.SaSignBeanRegister,\
+cn.dev33.satoken.spring.sign.SaSignBeanInject
\ No newline at end of file
diff --git a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 7ea52e5f..b227d742 100644
--- a/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/sa-token-starter/sa-token-spring-boot-autoconfig/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -3,4 +3,8 @@ cn.dev33.satoken.spring.SaBeanInject
cn.dev33.satoken.spring.sso.SaSsoBeanRegister
cn.dev33.satoken.spring.sso.SaSsoBeanInject
cn.dev33.satoken.spring.oauth2.SaOAuth2BeanRegister
-cn.dev33.satoken.spring.oauth2.SaOAuth2BeanInject
\ No newline at end of file
+cn.dev33.satoken.spring.oauth2.SaOAuth2BeanInject
+cn.dev33.satoken.spring.apikey.SaApiKeyBeanRegister
+cn.dev33.satoken.spring.apikey.SaApiKeyBeanInject
+cn.dev33.satoken.spring.sign.SaSignBeanRegister
+cn.dev33.satoken.spring.sign.SaSignBeanInject
\ No newline at end of file