From 94b1ab29a66776549fcbfc59f092a7cb7c273c32 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Mon, 15 May 2023 01:26:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20`sa-token.sso.mode`=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B9=EF=BC=8C=E7=94=A8=E4=BA=8E=E7=BA=A6?= =?UTF-8?q?=E5=AE=9A=E6=AD=A4=E7=B3=BB=E7=BB=9F=E4=BD=BF=E7=94=A8=E7=9A=84?= =?UTF-8?q?=20SSO=20=E6=A8=A1=E5=BC=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sa-token-doc/sso/sso-questions.md | 34 +++++++++++++++++++ .../cn/dev33/satoken/config/SaSsoConfig.java | 34 +++++++++++++++++-- 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/sa-token-doc/sso/sso-questions.md b/sa-token-doc/sso/sso-questions.md index 02c71a04..371ab303 100644 --- a/sa-token-doc/sso/sso-questions.md +++ b/sa-token-doc/sso/sso-questions.md @@ -99,6 +99,40 @@ sa-token: - 此时框架只以 auth-url 值为准,得到的 auth-url 值是:`http://my-site.com/sso/auth2`,其它三个 url 配置项同理。 +### 问:我接手了一个项目,里面集成了 Sa-Token SSO ,请问怎么快速分辨它用的模式几? + +**方法一:看代码注释。** + +如果开发这个项目的人没有写清楚注释那就 gg 了。 + +**方法二,根据配置项来分析,例如:** + +- 先看配置项 `sa-token.cookie.domain`,如果此配置项有值,一般是在使用模式一开发,否则就是模式二或者模式三。 +- 再看配置项 `sa-token.sso.is-http` ,如果有值且为 true,一般是在使用模式三,否则就是模式二。 + +**方法三,根据配置项 `sa-token.sso.mode` 的提示来判断** + +`sa-token.sso.mode` 是框架预留的约定型配置项,此配置项不对代码逻辑产生任何影响,只为系统做一个标记,标注此系统用到了SSO的哪个模式。 + +例如你可以将其配置为 `sa-token.sso.mode=client-2`,代表当前系统为 sso-client 端,使用 SSO 模式二来对接。 + +需要注意,这个配置项不是必须的,你不写也不会对代码造成任何影响,只有在你需要为系统做一个明确的标记时才需要去配置它,方便后人阅读代码时快速分析使用的模式。 + +例如我们可以使用以下约定: + +- `sa-token.sso.mode=client-2`:代表当前系统为 sso-client 端,使用 SSO 模式二来对接。 +- `sa-token.sso.mode=client-2,h5`:代表当前系统为 sso-client 端,使用 SSO 模式二来对接,并且是前后端分离模式。 +- `sa-token.sso.mode=server-123`:代表当前系统为 sso-server 端,同时开放了 SSO 模式一、模式二、模式三。 +- `sa-token.sso.mode=server-2,client-2`:代表当前系统既是 sso-server 端,又是 sso-clent 端,使用模式二来对接。 +- 等等等等... + +此配置项可以是任意字符串,你也可以自己整理一套合适的表达规则。 + + + + + + ### 问:SSO模式二或模式三,第一个 client 登录成功之后再访问其它两个 client 不会自动登录,需要点一下登录按钮才会登录上? 答:这是正常现象,系统 1 登录成功之后,系统 2 与系统 3 需要点击登录按钮,才会登录成功。 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 8d981eae..e09843bd 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 @@ -22,7 +22,12 @@ public class SaSsoConfig implements Serializable { private static final long serialVersionUID = -6541180061782004705L; - // ----------------- Server端相关配置 + // ----------------- Server端相关配置 + + /** + * 指定当前系统集成 SSO 时使用的模式(约定型配置项,不对代码逻辑产生任何影响) + */ + public String mode = ""; /** * Ticket有效期 (单位: 秒) @@ -47,6 +52,11 @@ public class SaSsoConfig implements Serializable { // ----------------- Client端相关配置 +// /** +// * 指定当前系统集成 SSO 时使用的模式(约定型配置项,不对代码逻辑产生任何影响) +// */ +// public String mode = ""; // 同Server端,不再重复声明 + /** * 当前 Client 名称标识,用于和 ticket 码的互相锁定 */ @@ -103,6 +113,24 @@ public class SaSsoConfig implements Serializable { public String serverUrl; + /** + * 获取 指定当前系统集成 SSO 时使用的模式(约定型配置项,不对代码逻辑产生任何影响) + * + * @return / + */ + public String getMode() { + return this.mode; + } + + /** + * 设置 指定当前系统集成 SSO 时使用的模式(约定型配置项,不对代码逻辑产生任何影响) + * + * @param mode / + */ + public void setMode(String mode) { + this.mode = mode; + } + /** * @return Ticket有效期 (单位: 秒) */ @@ -297,7 +325,8 @@ public class SaSsoConfig implements Serializable { @Override public String toString() { return "SaSsoConfig [" - + "ticketTimeout=" + ticketTimeout + + "mode=" + mode + + ", ticketTimeout=" + ticketTimeout + ", allowUrl=" + allowUrl + ", isSlo=" + isSlo + ", isHttp=" + isHttp @@ -457,5 +486,4 @@ public class SaSsoConfig implements Serializable { return sendHttp; } - }