1
0
mirror of synced 2026-05-22 14:43:15 +00:00

refactor(sso): 封住化获取 client 标识值

This commit is contained in:
click33
2025-05-02 04:54:38 +08:00
parent 5aac119beb
commit 62e5c9b19d
4 changed files with 21 additions and 26 deletions
@@ -179,7 +179,7 @@ public class SaSsoClientProcessor {
// 1、校验签名 // 1、校验签名
Map<String, String> paramMap = SaHolder.getRequest().getParamMap(); Map<String, String> paramMap = SaHolder.getRequest().getParamMap();
if(ssoClientConfig.getIsCheckSign()) { if(ssoClientConfig.getIsCheckSign()) {
ssoClientTemplate.getSignTemplate(ssoClientConfig.getClient()).checkParamMap(paramMap); ssoClientTemplate.getSignTemplate().checkParamMap(paramMap);
} else { } else {
SaSsoManager.printNoCheckSignWarningByRuntime(); SaSsoManager.printNoCheckSignWarningByRuntime();
} }
@@ -265,7 +265,7 @@ public class SaSsoClientProcessor {
// 校验参数签名 // 校验参数签名
if(ssoConfig.getIsCheckSign()) { if(ssoConfig.getIsCheckSign()) {
ssoClientTemplate.getSignTemplate(ssoConfig.getClient()).checkRequest(req); ssoClientTemplate.getSignTemplate().checkRequest(req);
} else { } else {
SaSsoManager.printNoCheckSignWarningByRuntime(); SaSsoManager.printNoCheckSignWarningByRuntime();
} }
@@ -341,7 +341,7 @@ public class SaSsoClientProcessor {
// 解决方案为:在当前 sso-client 端也按照 sso-server 端的格式重写 SaSsoClientProcessor 里的方法 // 解决方案为:在当前 sso-client 端也按照 sso-server 端的格式重写 SaSsoClientProcessor 里的方法
StpLogic stpLogic = ssoClientTemplate.getStpLogic(); StpLogic stpLogic = ssoClientTemplate.getStpLogic();
TicketModel ticketModel = SaSsoServerProcessor.instance.ssoServerTemplate.checkTicketParamAndDelete(ticket, cfg.getClient()); TicketModel ticketModel = SaSsoServerProcessor.instance.ssoServerTemplate.checkTicketParamAndDelete(ticket, ssoClientTemplate.getClient());
SaCheckTicketResult ctr = new SaCheckTicketResult(); SaCheckTicketResult ctr = new SaCheckTicketResult();
ctr.loginId = ticketModel.getLoginId(); ctr.loginId = ticketModel.getLoginId();
@@ -83,7 +83,7 @@ public class SaSsoClientTemplate extends SaSsoTemplate {
String serverUrl = ssoConfig.splicingAuthUrl(); String serverUrl = ssoConfig.splicingAuthUrl();
// 拼接客户端标识 // 拼接客户端标识
String client = ssoConfig.getClient(); String client = getClient();
if(SaFoxUtil.isNotEmpty(client)) { if(SaFoxUtil.isNotEmpty(client)) {
serverUrl = SaFoxUtil.joinParam(serverUrl, paramName.client, client); serverUrl = SaFoxUtil.joinParam(serverUrl, paramName.client, client);
} }
@@ -135,8 +135,8 @@ public class SaSsoClientTemplate extends SaSsoTemplate {
} }
// 构建参数字符串 // 构建参数字符串
paramMap.put(paramName.client, ssoConfig.getClient()); paramMap.put(paramName.client, getClient());
String signParamsStr = getSignTemplate(ssoConfig.getClient()).addSignParamsAndJoin(paramMap); String signParamsStr = getSignTemplate().addSignParamsAndJoin(paramMap);
// 拼接 // 拼接
return SaFoxUtil.joinParam(url, signParamsStr); return SaFoxUtil.joinParam(url, signParamsStr);
@@ -153,7 +153,7 @@ public class SaSsoClientTemplate extends SaSsoTemplate {
SaSsoClientConfig ssoConfig = getClientConfig(); SaSsoClientConfig ssoConfig = getClientConfig();
SaSsoMessage message = new SaSsoMessage(); SaSsoMessage message = new SaSsoMessage();
message.setType(SaSsoConsts.MESSAGE_CHECK_TICKET); message.setType(SaSsoConsts.MESSAGE_CHECK_TICKET);
message.set(paramName.client, ssoConfig.getClient()); message.set(paramName.client, getClient());
message.set(paramName.ticket, ticket); message.set(paramName.ticket, ticket);
message.set(paramName.ssoLogoutCall, ssoLogoutCallUrl); message.set(paramName.ssoLogoutCall, ssoLogoutCallUrl);
return message; return message;
@@ -170,7 +170,7 @@ public class SaSsoClientTemplate extends SaSsoTemplate {
SaSsoClientConfig ssoConfig = getClientConfig(); SaSsoClientConfig ssoConfig = getClientConfig();
SaSsoMessage message = new SaSsoMessage(); SaSsoMessage message = new SaSsoMessage();
message.setType(SaSsoConsts.MESSAGE_SIGNOUT); message.setType(SaSsoConsts.MESSAGE_SIGNOUT);
message.set(paramName.client, ssoConfig.getClient()); message.set(paramName.client, getClient());
message.set(paramName.loginId, loginId); message.set(paramName.loginId, loginId);
message.set(paramName.deviceId, logoutParameter.getDeviceId()); message.set(paramName.deviceId, logoutParameter.getDeviceId());
return message; return message;
@@ -193,9 +193,9 @@ public class SaSsoClientTemplate extends SaSsoTemplate {
SaSsoException.notTrue(! SaFoxUtil.isUrl(pushUrl), "无效 push-url 地址:" + pushUrl, SaSsoErrorCode.CODE_30023); SaSsoException.notTrue(! SaFoxUtil.isUrl(pushUrl), "无效 push-url 地址:" + pushUrl, SaSsoErrorCode.CODE_30023);
// 组织参数 // 组织参数
message.set(paramName.client, ssoConfig.getClient()); message.set(paramName.client, getClient());
message.checkType(); message.checkType();
String paramsStr = getSignTemplate(ssoConfig.getClient()).addSignParamsAndJoin(message); String paramsStr = getSignTemplate().addSignParamsAndJoin(message);
// 发起请求 // 发起请求
String finalUrl = SaFoxUtil.joinParam(pushUrl, paramsStr); String finalUrl = SaFoxUtil.joinParam(pushUrl, paramsStr);
@@ -226,12 +226,19 @@ public class SaSsoClientTemplate extends SaSsoTemplate {
} }
/** /**
* 获取底层使用的 API 签名对象 * 获取当前项目 client 标识
* @param client 指定客户端标识,填 null 代表获取默认的
* @return / * @return /
*/ */
@Override public String getClient() {
public SaSignTemplate getSignTemplate(String client) { return getClientConfig().getClient();
}
/**
* 获取底层使用的 API 签名对象
*
* @return /
*/
public SaSignTemplate getSignTemplate() {
SaSignConfig signConfig = SaManager.getSaSignTemplate().getSignConfigOrGlobal().copy(); SaSignConfig signConfig = SaManager.getSaSignTemplate().getSignConfigOrGlobal().copy();
// 使用 secretKey 的优先级:SSO 模块全局配置 > sign 模块默认配置 // 使用 secretKey 的优先级:SSO 模块全局配置 > sign 模块默认配置
@@ -737,7 +737,6 @@ public class SaSsoServerTemplate extends SaSsoTemplate {
* @param client 指定客户端标识,填 null 代表获取默认的 * @param client 指定客户端标识,填 null 代表获取默认的
* @return / * @return /
*/ */
@Override
public SaSignTemplate getSignTemplate(String client) { public SaSignTemplate getSignTemplate(String client) {
SaSignConfig signConfig = SaManager.getSaSignTemplate().getSignConfigOrGlobal().copy(); SaSignConfig signConfig = SaManager.getSaSignTemplate().getSignConfigOrGlobal().copy();
SaSsoClientModel clientModel = getClientNotNull(client); SaSsoClientModel clientModel = getClientNotNull(client);
@@ -16,7 +16,6 @@
package cn.dev33.satoken.sso.template; package cn.dev33.satoken.sso.template;
import cn.dev33.satoken.SaManager; import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.sign.SaSignTemplate;
import cn.dev33.satoken.sso.message.SaSsoMessage; import cn.dev33.satoken.sso.message.SaSsoMessage;
import cn.dev33.satoken.sso.message.SaSsoMessageHolder; import cn.dev33.satoken.sso.message.SaSsoMessageHolder;
import cn.dev33.satoken.sso.name.ApiName; import cn.dev33.satoken.sso.name.ApiName;
@@ -73,16 +72,6 @@ public class SaSsoTemplate {
return StpUtil.stpLogic; return StpUtil.stpLogic;
} }
/**
* 获取底层使用的 API 签名对象
* @param client 指定客户端标识,填 null 代表获取默认的
* @return /
*/
public SaSignTemplate getSignTemplate(String client) {
// 框架默认只返回全局 SaSignTemplateclient 参数留作开发者扩展
return SaManager.getSaSignTemplate();
}
// ----------- 消息处理 // ----------- 消息处理
public SaSsoMessageHolder messageHolder = new SaSsoMessageHolder(); public SaSsoMessageHolder messageHolder = new SaSsoMessageHolder();