From 5434ee8800a70e18da420ec4f3da9a45ce4e4632 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Mon, 15 Aug 2022 09:14:28 +0800 Subject: [PATCH] =?UTF-8?q?SSO=E6=A8=A1=E5=9D=97=E5=A2=9E=E5=8A=A0=20serve?= =?UTF-8?q?r-url=20=E5=B1=9E=E6=80=A7=EF=BC=8C=E7=94=A8=E4=BA=8E=E7=AE=80?= =?UTF-8?q?=E5=8C=96=E5=90=84=E7=A7=8D=20url=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/dev33/satoken/strategy/SaStrategy.java | 35 ++++++++++ .../java/com/pj/sso/SsoClientController.java | 4 +- .../cn/dev33/satoken/config/SaSsoConfig.java | 66 +++++++++++++++++-- .../cn/dev33/satoken/sso/SaSsoConsts.java | 3 + .../cn/dev33/satoken/sso/SaSsoTemplate.java | 8 +-- 5 files changed, 103 insertions(+), 13 deletions(-) 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 应用端
" +
"