mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-09-20 18:47:58 +08:00
文档增加sso模式三自定义接口通信示例
This commit is contained in:
@@ -152,7 +152,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="https://unpkg.com/docsify@4.9.4/lib/docsify.min.js"></script>
|
<script src="https://unpkg.com/docsify@4.9.4/lib/docsify.min.js"></script>
|
||||||
<script src="https://unpkg.com/docsify-copy-code@2.1.0/dist/docsify-copy-code.min.js"></script>
|
<script src="https://unpkg.com/docsify-copy-code@2.1.0/dist/docsify-copy-code.min.js"></script>
|
||||||
<script src="https://unpkg.com/prismjs@1.20.0/components/prism-java.min.js"></script>
|
<script src="lib/prism-java.min.js"></script>
|
||||||
<!-- 搜索框 -->
|
<!-- 搜索框 -->
|
||||||
<script src="lib/search.min.js"></script>
|
<script src="lib/search.min.js"></script>
|
||||||
<!-- 多 tab 切换 -->
|
<!-- 多 tab 切换 -->
|
||||||
|
@@ -153,7 +153,7 @@
|
|||||||
</script>
|
</script>
|
||||||
<script src="https://unpkg.zhimg.com/docsify@4.9.4/lib/docsify.min.js"></script>
|
<script src="https://unpkg.zhimg.com/docsify@4.9.4/lib/docsify.min.js"></script>
|
||||||
<script src="https://unpkg.zhimg.com/docsify-copy-code@2.1.0/dist/docsify-copy-code.min.js"></script>
|
<script src="https://unpkg.zhimg.com/docsify-copy-code@2.1.0/dist/docsify-copy-code.min.js"></script>
|
||||||
<script src="https://unpkg.zhimg.com/prismjs@1.20.0/components/prism-java.min.js"></script>
|
<script src="lib/prism-java.min.js"></script>
|
||||||
<!-- 搜索框 -->
|
<!-- 搜索框 -->
|
||||||
<script src="lib/search.min.js"></script>
|
<script src="lib/search.min.js"></script>
|
||||||
<!-- 多 tab 切换 -->
|
<!-- 多 tab 切换 -->
|
||||||
|
1
sa-token-doc/doc/lib/prism-java.min.js
vendored
Normal file
1
sa-token-doc/doc/lib/prism-java.min.js
vendored
Normal file
@@ -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);
|
@@ -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)
|
访问测试:[http://sa-sso-client1.com:9001/sso/myinfo](http://sa-sso-client1.com:9001/sso/myinfo)
|
||||||
|
|
||||||
#### 3.3、疑问
|
|
||||||
|
### 4、自定义接口通信
|
||||||
|
|
||||||
群里有小伙伴提问:`SaSsoUtil.getUserinfo` 提供的参数太少,只有一个 loginId,无法满足业务需求怎么办?
|
群里有小伙伴提问:`SaSsoUtil.getUserinfo` 提供的参数太少,只有一个 loginId,无法满足业务需求怎么办?
|
||||||
|
|
||||||
答:SaSsoUtil.getUserinfo只是为了避免你在项目中硬编码认证中心 url 而提供的简易封装,如果这个API无法满足你的业务需求,
|
答:SaSsoUtil.getUserinfo只是为了避免你在项目中硬编码认证中心 url 而提供的简易封装,如果这个API无法满足你的业务需求,
|
||||||
你完全可以在 Server 端自定义一些接口然后从 Client 端使用 http 工具调用即可。
|
你完全可以在 Server 端自定义一些接口然后从 Client 端使用 http 工具调用即可。
|
||||||
|
|
||||||
|
以下是一个简单的示例:
|
||||||
|
|
||||||
|
#### 4.1、先在 sso-server 端自定义一个接口
|
||||||
|
``` java
|
||||||
|
// 获取指定用户的关注列表
|
||||||
|
@RequestMapping("/sso/getFollowList")
|
||||||
|
public Object ssoRequest(Long loginId) {
|
||||||
|
|
||||||
|
// 校验签名,签名不通过直接抛出异常
|
||||||
|
SaSsoUtil.checkSign(SaHolder.getRequest());
|
||||||
|
|
||||||
|
// 查询数据 (此处仅做模拟)
|
||||||
|
List<Integer> 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端下线
|
有了单点登录就必然要有单点注销,网上给出的大多数解决方案是将注销请求重定向至SSO-Server中心,逐个通知Client端下线
|
||||||
|
|
||||||
@@ -137,7 +178,7 @@ public Object myinfo() {
|
|||||||
|
|
||||||
这些逻辑 Sa-Token 内部已经封装完毕,你只需按照文档增加以下配置即可:
|
这些逻辑 Sa-Token 内部已经封装完毕,你只需按照文档增加以下配置即可:
|
||||||
|
|
||||||
#### 4.1、SSO-Client 端新增配置
|
#### 5.1、SSO-Client 端新增配置
|
||||||
|
|
||||||
在 `application.yml` 增加配置:`API调用秘钥` 和 `单点注销接口URL`。
|
在 `application.yml` 增加配置:`API调用秘钥` 和 `单点注销接口URL`。
|
||||||
``` yml
|
``` yml
|
||||||
@@ -153,7 +194,7 @@ sa-token:
|
|||||||
注意 secretkey 秘钥需要与SSO认证中心的一致
|
注意 secretkey 秘钥需要与SSO认证中心的一致
|
||||||
|
|
||||||
|
|
||||||
#### 4.2 启动测试
|
#### 5.2、启动测试
|
||||||
重启项目,访问测试:[http://sa-sso-client1.com:9001/](http://sa-sso-client1.com:9001/),
|
重启项目,访问测试:[http://sa-sso-client1.com:9001/](http://sa-sso-client1.com:9001/),
|
||||||
我们主要的测试点在于 `单点注销`,正常登录即可。
|
我们主要的测试点在于 `单点注销`,正常登录即可。
|
||||||
|
|
||||||
@@ -167,16 +208,16 @@ sa-token:
|
|||||||
|
|
||||||
PS:这里我们为了方便演示,使用的是超链接跳页面的形式,正式项目中使用 Ajax 调用接口即可做到无刷单点登录退出。
|
PS:这里我们为了方便演示,使用的是超链接跳页面的形式,正式项目中使用 Ajax 调用接口即可做到无刷单点登录退出。
|
||||||
|
|
||||||
例如,我们使用 [APIPost接口测试工具](https://www.apipost.cn/) 可以做到同样的效果:
|
例如,我们使用 [Apifox 接口测试工具](https://www.apifox.cn/) 可以做到同样的效果:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
测试完毕!
|
测试完毕!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 4、后记
|
### 6、后记
|
||||||
当我们熟读三种模式的单点登录之后,其实不难发现:所谓单点登录,其本质就是多个系统之间的会话共享。
|
当我们熟读三种模式的单点登录之后,其实不难发现:所谓单点登录,其本质就是多个系统之间的会话共享。
|
||||||
|
|
||||||
当我们理解这一点之后,三种模式的工作原理也浮出水面:
|
当我们理解这一点之后,三种模式的工作原理也浮出水面:
|
||||||
|
Reference in New Issue
Block a user