将SSO模式三的接口调用改为签名式校验

This commit is contained in:
click33
2022-04-29 03:23:46 +08:00
parent 5e3795e29e
commit de39d91b71
23 changed files with 575 additions and 281 deletions

View File

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

View File

@@ -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);
}
}

View File

@@ -0,0 +1,11 @@
package cn.dev33.satoken.sign;
/**
* 参数签名算法 [默认实现类]
*
* @author kong
* @date: 2022-4-27
*/
public class SaSignTemplateDefaultImpl implements SaSignTemplate {
}