mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-09-19 10:08:07 +08:00
将SSO模式三的接口调用改为签名式校验
This commit is contained in:
@@ -15,6 +15,8 @@ import cn.dev33.satoken.json.SaJsonTemplate;
|
||||
import cn.dev33.satoken.json.SaJsonTemplateDefaultImpl;
|
||||
import cn.dev33.satoken.listener.SaTokenListener;
|
||||
import cn.dev33.satoken.listener.SaTokenListenerDefaultImpl;
|
||||
import cn.dev33.satoken.sign.SaSignTemplate;
|
||||
import cn.dev33.satoken.sign.SaSignTemplateDefaultImpl;
|
||||
import cn.dev33.satoken.stp.StpInterface;
|
||||
import cn.dev33.satoken.stp.StpInterfaceDefaultImpl;
|
||||
import cn.dev33.satoken.stp.StpLogic;
|
||||
@@ -191,6 +193,24 @@ public class SaManager {
|
||||
}
|
||||
return saJsonTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* 参数签名 Bean
|
||||
*/
|
||||
private volatile static SaSignTemplate saSignTemplate;
|
||||
public static void setSaSignTemplate(SaSignTemplate saSignTemplate) {
|
||||
SaManager.saSignTemplate = saSignTemplate;
|
||||
}
|
||||
public static SaSignTemplate getSaSignTemplate() {
|
||||
if (saSignTemplate == null) {
|
||||
synchronized (SaManager.class) {
|
||||
if (saSignTemplate == null) {
|
||||
setSaSignTemplate(new SaSignTemplateDefaultImpl());
|
||||
}
|
||||
}
|
||||
}
|
||||
return saSignTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* StpLogic集合, 记录框架所有成功初始化的StpLogic
|
||||
|
@@ -0,0 +1,59 @@
|
||||
package cn.dev33.satoken.sign;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import cn.dev33.satoken.secure.SaSecureUtil;
|
||||
import cn.dev33.satoken.util.SaFoxUtil;
|
||||
|
||||
/**
|
||||
* 参数签名算法
|
||||
*
|
||||
* @author kong
|
||||
* @date: 2022-4-27
|
||||
*/
|
||||
public interface SaSignTemplate {
|
||||
|
||||
/**
|
||||
* 将所有参数连接成一个字符串,形如: k1=v1&k2=v2&k3=v3
|
||||
* @param paramsMap 参数列表
|
||||
* @return 字符串
|
||||
*/
|
||||
public default String joinParams(Map<String, Object> paramsMap) {
|
||||
// 保证字段按照字典顺序排列
|
||||
if(paramsMap instanceof TreeMap == false) {
|
||||
paramsMap = new TreeMap<>(paramsMap);
|
||||
}
|
||||
|
||||
// 按照 k1=v1&k2=v2&k3=v3 排列
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (String key : paramsMap.keySet()) {
|
||||
Object value = paramsMap.get(key);
|
||||
if(SaFoxUtil.isEmpty(value) == false) {
|
||||
sb.append(key).append("=").append(value).append("&");
|
||||
}
|
||||
}
|
||||
|
||||
// 删除最后一位 &
|
||||
if(sb.length() > 0) {
|
||||
sb.deleteCharAt(sb.length() - 1);
|
||||
}
|
||||
|
||||
// .
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建签名:md5(paramsStr + keyStr)
|
||||
* @param paramsMap 参数列表
|
||||
* @param key 秘钥
|
||||
* @return
|
||||
*/
|
||||
public default String createSign(Map<String, Object> paramsMap, String key) {
|
||||
String paramsStr = joinParams(paramsMap);
|
||||
String fullStr = paramsStr + "&key=" + key;
|
||||
return SaSecureUtil.md5(fullStr);
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
package cn.dev33.satoken.sign;
|
||||
|
||||
/**
|
||||
* 参数签名算法 [默认实现类]
|
||||
*
|
||||
* @author kong
|
||||
* @date: 2022-4-27
|
||||
*/
|
||||
public class SaSignTemplateDefaultImpl implements SaSignTemplate {
|
||||
|
||||
}
|
Reference in New Issue
Block a user