From 4d54e13cbc7730bde6fecd7f07135b7bebd21bac Mon Sep 17 00:00:00 2001
From: click33 <2393584716@qq.com>
Date: Tue, 17 May 2022 17:13:29 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=A2=9E=E5=8A=A0sso?=
=?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=89=E8=87=AA=E5=AE=9A=E4=B9=89=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=E9=80=9A=E4=BF=A1=E7=A4=BA=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sa-token-doc/doc/index-backup.html | 2 +-
sa-token-doc/doc/index.html | 2 +-
sa-token-doc/doc/lib/prism-java.min.js | 1 +
sa-token-doc/doc/sso/sso-type3.md | 55 ++++++++++++++++++++++----
4 files changed, 51 insertions(+), 9 deletions(-)
create mode 100644 sa-token-doc/doc/lib/prism-java.min.js
diff --git a/sa-token-doc/doc/index-backup.html b/sa-token-doc/doc/index-backup.html
index 5878a537..a5c27047 100644
--- a/sa-token-doc/doc/index-backup.html
+++ b/sa-token-doc/doc/index-backup.html
@@ -152,7 +152,7 @@
-
+
diff --git a/sa-token-doc/doc/index.html b/sa-token-doc/doc/index.html
index aec8994e..4281a962 100644
--- a/sa-token-doc/doc/index.html
+++ b/sa-token-doc/doc/index.html
@@ -153,7 +153,7 @@
-
+
diff --git a/sa-token-doc/doc/lib/prism-java.min.js b/sa-token-doc/doc/lib/prism-java.min.js
new file mode 100644
index 00000000..079c8d4e
--- /dev/null
+++ b/sa-token-doc/doc/lib/prism-java.min.js
@@ -0,0 +1 @@
+!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|null|open|opens|package|private|protected|provides|public|record|requires|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,a=/\b[A-Z](?:\w*[a-z]\w*)?\b/;e.languages.java=e.languages.extend("clike",{"class-name":[a,/\b[A-Z]\w*(?=\s+\w+\s*[;,=())])/],keyword:t,function:[e.languages.clike.function,{pattern:/(\:\:)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x[\da-f_]*\.?[\da-f_p+-]+\b|(?:\b\d[\d_]*\.?[\d_]*|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"}}),e.languages.insertBefore("java","class-name",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0},namespace:{pattern:/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)[a-z]\w*(?:\.[a-z]\w*)+/,lookbehind:!0,inside:{punctuation:/\./}},generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(Prism);
\ No newline at end of file
diff --git a/sa-token-doc/doc/sso/sso-type3.md b/sa-token-doc/doc/sso/sso-type3.md
index edb70b9d..6fdf31ae 100644
--- a/sa-token-doc/doc/sso/sso-type3.md
+++ b/sa-token-doc/doc/sso/sso-type3.md
@@ -106,19 +106,60 @@ public Object myinfo() {
}
```
+#### 3.3、访问测试
访问测试:[http://sa-sso-client1.com:9001/sso/myinfo](http://sa-sso-client1.com:9001/sso/myinfo)
-#### 3.3、疑问
+
+### 4、自定义接口通信
群里有小伙伴提问:`SaSsoUtil.getUserinfo` 提供的参数太少,只有一个 loginId,无法满足业务需求怎么办?
答:SaSsoUtil.getUserinfo只是为了避免你在项目中硬编码认证中心 url 而提供的简易封装,如果这个API无法满足你的业务需求,
你完全可以在 Server 端自定义一些接口然后从 Client 端使用 http 工具调用即可。
+以下是一个简单的示例:
+
+#### 4.1、先在 sso-server 端自定义一个接口
+``` java
+// 获取指定用户的关注列表
+@RequestMapping("/sso/getFollowList")
+public Object ssoRequest(Long loginId) {
+
+ // 校验签名,签名不通过直接抛出异常
+ SaSsoUtil.checkSign(SaHolder.getRequest());
+
+ // 查询数据 (此处仅做模拟)
+ List list = Arrays.asList(10041, 10042, 10043, 10044);
+
+ // 返回
+ return list;
+}
+```
+
+
+#### 4.2、然后在 sso-client 端调用这个接口
+``` java
+// 查询我的账号信息
+@RequestMapping("/sso/myFollowList")
+public Object myFollowList() {
+ // 组织url,加上签名参数
+ String url = SaSsoUtil.addSignParams("http://sa-sso-server.com:9000/sso/getFollowList", StpUtil.getLoginId());
+
+ // 调用,并返回 SaResult 结果
+ SaResult res = SaSsoUtil.request(url);
+
+ // 返回给前端
+ return res;
+}
+```
+
+#### 4.3、访问测试
+访问测试:[http://sa-sso-client1.com:9001/sso/myFollowList](http://sa-sso-client1.com:9001/sso/myFollowList)
-### 4、无刷单点注销
+
+### 5、无刷单点注销
有了单点登录就必然要有单点注销,网上给出的大多数解决方案是将注销请求重定向至SSO-Server中心,逐个通知Client端下线
@@ -137,7 +178,7 @@ public Object myinfo() {
这些逻辑 Sa-Token 内部已经封装完毕,你只需按照文档增加以下配置即可:
-#### 4.1、SSO-Client 端新增配置
+#### 5.1、SSO-Client 端新增配置
在 `application.yml` 增加配置:`API调用秘钥` 和 `单点注销接口URL`。
``` yml
@@ -153,7 +194,7 @@ sa-token:
注意 secretkey 秘钥需要与SSO认证中心的一致
-#### 4.2 启动测试
+#### 5.2、启动测试
重启项目,访问测试:[http://sa-sso-client1.com:9001/](http://sa-sso-client1.com:9001/),
我们主要的测试点在于 `单点注销`,正常登录即可。
@@ -167,16 +208,16 @@ sa-token:
PS:这里我们为了方便演示,使用的是超链接跳页面的形式,正式项目中使用 Ajax 调用接口即可做到无刷单点登录退出。
-例如,我们使用 [APIPost接口测试工具](https://www.apipost.cn/) 可以做到同样的效果:
+例如,我们使用 [Apifox 接口测试工具](https://www.apifox.cn/) 可以做到同样的效果:
-
+
测试完毕!
-### 4、后记
+### 6、后记
当我们熟读三种模式的单点登录之后,其实不难发现:所谓单点登录,其本质就是多个系统之间的会话共享。
当我们理解这一点之后,三种模式的工作原理也浮出水面: