Merge branch 'dev' into pref/1.31.0-double_check_lock

This commit is contained in:
click33
2022-08-26 00:21:39 +08:00
committed by GitHub
156 changed files with 5194 additions and 1469 deletions

View File

@@ -53,7 +53,7 @@ public class SaSsoConfig implements Serializable {
/**
* 配置 Server 端单点登录授权地址
*/
public String authUrl;
public String authUrl = "/sso/auth";
/**
* 是否打开单点注销功能
@@ -73,26 +73,30 @@ public class SaSsoConfig implements Serializable {
/**
* 配置 Server 端的 ticket 校验地址
*/
public String checkTicketUrl;
public String checkTicketUrl = "/sso/checkTicket";
/**
* 配置 Server 端查询 userinfo 地址
*/
public String userinfoUrl;
public String userinfoUrl = "/sso/userinfo";
/**
* 配置 Server 端单点注销地址
*/
public String sloUrl;
public String sloUrl = "/sso/logout";
/**
* 配置当前 Client 端的单点注销回调URL (为空时自动获取)
*/
public String ssoLogoutCall;
/**
* 配置 Server 端主机总地址,拼接在 authUrl、checkTicketUrl、userinfoUrl、sloUrl 属性前面,用以简化各种 url 配置
*/
public String serverUrl;
// ----------------- 其它
/**
* 接口调用时的时间戳允许的差距单位ms-1代表不校验差距
*/
@@ -261,6 +265,22 @@ public class SaSsoConfig implements Serializable {
return this;
}
/**
* @return 配置的 Server 端主机总地址,拼接在 authUrl、checkTicketUrl、userinfoUrl、sloUrl 属性前面,用以简化各种 url 配置
*/
public String getServerUrl() {
return serverUrl;
}
/**
* @param serverUrl 配置 Server 端主机总地址,拼接在 authUrl、checkTicketUrl、userinfoUrl、sloUrl 属性前面,用以简化各种 url 配置
* @return 对象自身
*/
public SaSsoConfig setServerUrl(String serverUrl) {
this.serverUrl = serverUrl;
return this;
}
/**
* @return 接口调用时的时间戳允许的差距单位ms-1代表不校验差距
*/
@@ -276,7 +296,7 @@ public class SaSsoConfig implements Serializable {
this.timestampDisparity = timestampDisparity;
return this;
}
@Override
public String toString() {
return "SaSsoConfig ["
@@ -290,10 +310,42 @@ public class SaSsoConfig implements Serializable {
+ ", userinfoUrl=" + userinfoUrl
+ ", sloUrl=" + sloUrl
+ ", ssoLogoutCall=" + ssoLogoutCall
+ ", serverUrl=" + serverUrl
+ ", timestampDisparity=" + timestampDisparity
+ "]";
}
// 额外添加的一些函数
/**
* @return 获取拼接urlServer 端单点登录授权地址
*/
public String splicingAuthUrl() {
return SaFoxUtil.spliceTwoUrl(getServerUrl(), getAuthUrl());
}
/**
* @return 获取拼接urlServer 端的 ticket 校验地址
*/
public String splicingCheckTicketUrl() {
return SaFoxUtil.spliceTwoUrl(getServerUrl(), getCheckTicketUrl());
}
/**
* @return 获取拼接urlServer 端查询 userinfo 地址
*/
public String splicingUserinfoUrl() {
return SaFoxUtil.spliceTwoUrl(getServerUrl(), getUserinfoUrl());
}
/**
* @return 获取拼接urlServer 端单点注销地址
*/
public String splicingSloUrl() {
return SaFoxUtil.spliceTwoUrl(getServerUrl(), getSloUrl());
}
/**
* 以数组形式写入允许的授权回调地址
* @param url 所有集合
@@ -305,7 +357,6 @@ public class SaSsoConfig implements Serializable {
}
// -------------------- SaSsoHandle 所有回调函数 --------------------
@@ -325,6 +376,8 @@ public class SaSsoConfig implements Serializable {
/**
* SSO-Client端自定义校验Ticket返回值的处理逻辑 每次从认证中心获取校验Ticket的结果后调用
* <p> 参数loginId, back
* <p> 返回值:返回给前端的值
*/
public BiFunction<Object, String, Object> ticketResultHandle = null;

View File

@@ -22,6 +22,9 @@ public class SaSsoConsts {
/** SSO-Server端校验ticket 获取账号id */
public static String ssoCheckTicket = "/sso/checkTicket";
/** SSO-Server端获取userinfo */
public static String ssoUserinfo = "/sso/userinfo";
/** SSO-Server端 (and Client端):单点注销地址 */
public static String ssoLogout = "/sso/logout";

View File

@@ -361,10 +361,22 @@ public class SaSsoHandle {
// --------- 两种模式
if(cfg.getIsHttp()) {
// 模式三:使用 http 请求从认证中心校验ticket
// q1、使用模式三:使用 http 请求从认证中心校验ticket
// 计算当前 sso-client 的单点注销回调地址
String ssoLogoutCall = null;
if(cfg.getIsSlo()) {
ssoLogoutCall = SaHolder.getRequest().getUrl().replace(currUri, Api.ssoLogoutCall);
// 如果配置了回调地址,就使用配置的值:
if(SaFoxUtil.isNotEmpty(cfg.getSsoLogoutCall())) {
ssoLogoutCall = cfg.getSsoLogoutCall();
}
// 如果提供了当前 uri则根据此值来计算
else if(SaFoxUtil.isNotEmpty(currUri)) {
ssoLogoutCall = SaHolder.getRequest().getUrl().replace(currUri, Api.ssoLogoutCall);
}
// 否则视为不注册单点注销回调地址
else {
}
}
// 发起请求
@@ -379,7 +391,7 @@ public class SaSsoHandle {
throw new SaSsoException(result.getMsg()).setCode(SaSsoExceptionCode.CODE_20005);
}
} else {
// 模式二直连Redis校验ticket
// q2、使用模式二直连Redis校验ticket
return SaSsoUtil.checkTicket(ticket);
}
}

View File

@@ -253,7 +253,7 @@ public class SaSsoTemplate {
public String buildServerAuthUrl(String clientLoginUrl, String back) {
// 服务端认证地址
String serverUrl = SaSsoManager.getConfig().getAuthUrl();
String serverUrl = SaSsoManager.getConfig().splicingAuthUrl();
// 对back地址编码
back = (back == null ? "" : back);
@@ -327,7 +327,7 @@ public class SaSsoTemplate {
* @return Server端 账号资料查询地址
*/
public String buildUserinfoUrl(Object loginId) {
String userinfoUrl = SaSsoManager.getConfig().getUserinfoUrl();
String userinfoUrl = SaSsoManager.getConfig().splicingUserinfoUrl();
return addSignParams(userinfoUrl, loginId);
}
@@ -340,7 +340,7 @@ public class SaSsoTemplate {
*/
public String buildCheckTicketUrl(String ticket, String ssoLogoutCallUrl) {
// 裸地址
String url = SaSsoManager.getConfig().getCheckTicketUrl();
String url = SaSsoManager.getConfig().splicingCheckTicketUrl();
// 拼接ticket参数
url = SaFoxUtil.joinParam(url, ParamName.ticket, ticket);
@@ -360,7 +360,7 @@ public class SaSsoTemplate {
* @return 单点注销URL
*/
public String buildSloUrl(Object loginId) {
String url = SaSsoManager.getConfig().getSloUrl();
String url = SaSsoManager.getConfig().splicingSloUrl();
return addSignParams(url, loginId);
}