diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/strategy/SaStrategy.java b/sa-token-core/src/main/java/cn/dev33/satoken/strategy/SaStrategy.java index 657c7bce..9f8e79d5 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/strategy/SaStrategy.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/strategy/SaStrategy.java @@ -178,12 +178,36 @@ public final class SaStrategy { // 默认使用jdk的注解处理器 return element.getAnnotation(annotationClass); }; + + /** + * 拼接两个url + *
例如:url1=http://domain.cn,url2=/sso/auth,则返回:http://domain.cn/sso/auth + *
参数 [第一个url, 第二个url]
+ */
+ public BiFunction 参数 [账号id, 账号类型]
@@ -249,6 +273,17 @@ public final class SaStrategy {
this.getAnnotation = getAnnotation;
return this;
}
+
+ /**
+ * 拼接两个url
+ * 例如:url1=http://domain.cn,url2=/sso/auth,则返回:http://domain.cn/sso/auth
+ * 参数 [第一个url, 第二个url]
+ *
+ * @param spliceTwoUrl 要设置的 spliceTwoUrl
+ */
+ public void setSpliceTwoUrl(BiFunction 当前会话是否登录:" + StpUtil.isLogin() + " 登录 " +
diff --git a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/config/SaSsoConfig.java b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/config/SaSsoConfig.java
index 563d8909..c233f4fb 100644
--- a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/config/SaSsoConfig.java
+++ b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/config/SaSsoConfig.java
@@ -7,6 +7,7 @@ import java.util.function.Function;
import java.util.function.Supplier;
import cn.dev33.satoken.exception.SaTokenException;
+import cn.dev33.satoken.strategy.SaStrategy;
import cn.dev33.satoken.util.SaFoxUtil;
import cn.dev33.satoken.util.SaResult;
@@ -53,7 +54,7 @@ public class SaSsoConfig implements Serializable {
/**
* 配置 Server 端单点登录授权地址
*/
- public String authUrl;
+ public String authUrl = "/sso/auth";
/**
* 是否打开单点注销功能
@@ -73,26 +74,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 +266,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 +297,7 @@ public class SaSsoConfig implements Serializable {
this.timestampDisparity = timestampDisparity;
return this;
}
-
+
@Override
public String toString() {
return "SaSsoConfig ["
@@ -290,10 +311,42 @@ public class SaSsoConfig implements Serializable {
+ ", userinfoUrl=" + userinfoUrl
+ ", sloUrl=" + sloUrl
+ ", ssoLogoutCall=" + ssoLogoutCall
+ + ", serverUrl=" + serverUrl
+ ", timestampDisparity=" + timestampDisparity
+ "]";
}
+
+ // 额外添加的一些函数
+
+ /**
+ * @return 获取拼接url:Server 端单点登录授权地址
+ */
+ public String splicingAuthUrl() {
+ return SaStrategy.me.spliceTwoUrl.apply(getServerUrl(), getAuthUrl());
+ }
+
+ /**
+ * @return 获取拼接url:Server 端的 ticket 校验地址
+ */
+ public String splicingCheckTicketUrl() {
+ return SaStrategy.me.spliceTwoUrl.apply(getServerUrl(), getCheckTicketUrl());
+ }
+
+ /**
+ * @return 获取拼接url:Server 端查询 userinfo 地址
+ */
+ public String splicingUserinfoUrl() {
+ return SaStrategy.me.spliceTwoUrl.apply(getServerUrl(), getUserinfoUrl());
+ }
+
+ /**
+ * @return 获取拼接url:Server 端单点注销地址
+ */
+ public String splicingSloUrl() {
+ return SaStrategy.me.spliceTwoUrl.apply(getServerUrl(), getSloUrl());
+ }
+
/**
* 以数组形式写入允许的授权回调地址
* @param url 所有集合
@@ -305,7 +358,6 @@ public class SaSsoConfig implements Serializable {
}
-
// -------------------- SaSsoHandle 所有回调函数 --------------------
diff --git a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/SaSsoConsts.java b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/SaSsoConsts.java
index f456f82e..307649f2 100644
--- a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/SaSsoConsts.java
+++ b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/SaSsoConsts.java
@@ -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";
diff --git a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java
index 6d1c4735..dc7445b6 100644
--- a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java
+++ b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java
@@ -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);
}
Sa-Token SSO-Client 应用端
" +
"