mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-10-26 02:29:01 +08:00
文档新增一个项目同时搭建两个 sso-server 服务 的示例
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
# Sa-Token-SSO整合-常见问题总结
|
||||
|
||||
SSO 集成常见问题整理
|
||||
|
||||
[[toc]]
|
||||
|
||||
---
|
||||
|
||||
### 问:在模式一与模式二中,Client端 必须通过 Alone-Redis 插件来访问Redis吗?
|
||||
@@ -43,8 +47,108 @@
|
||||
[SSO-Server 认证中心开放接口](/sso/sso-apidoc)
|
||||
|
||||
|
||||
### 问:怎么在一个项目里同时搭建 sso-server 和 sso-client?
|
||||
|
||||
难点在于解决两边的路由冲突,示例代码:
|
||||
|
||||
``` java
|
||||
// Sa-Token SSO Controller
|
||||
@RestController
|
||||
public class SsoController {
|
||||
|
||||
// 处理 SSO-Server 端所有请求
|
||||
@RequestMapping({"/sso/auth", "/sso/doLogin", "/sso/checkTicket", "/sso/signout"})
|
||||
public Object ssoServerRequest() {
|
||||
return SaSsoProcessor.instance.serverDister();
|
||||
}
|
||||
|
||||
// 处理 SSO-Client 端所有请求
|
||||
@RequestMapping({"/sso/login", "/sso/logout", "/sso/logoutCall"})
|
||||
public Object ssoClientRequest() {
|
||||
return SaSsoProcessor.instance.clientDister();
|
||||
}
|
||||
|
||||
// 配置SSO相关参数
|
||||
@Autowired
|
||||
private void configSso(SaSsoConfig sso) {
|
||||
// SSO配置代码,参考文档前几章 ...
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### 问:我一个项目里有两套账号体系,都需要单点登录,怎么在一个项目里同时搭建两个 sso-server 服务?
|
||||
|
||||
首先推荐你不要在一个项目里同时搭建两个 sso-server,建议创建两个项目,分别搭建各自的 sso-server 服务。
|
||||
|
||||
如果一定要在一个项目中搭建两套 sso-server 服务,参考方案如下:
|
||||
|
||||
第一套,还是用前面几章文档给出的示例代码。
|
||||
|
||||
第二套,修改一些参数属性,使之与第一套不产生冲突,参考代码如下:
|
||||
|
||||
``` java
|
||||
/**
|
||||
* Sa-Token-SSO 第二套 SSO-Server端 Controller
|
||||
*/
|
||||
@RestController
|
||||
public class SsoUserServerController {
|
||||
|
||||
/**
|
||||
* 新建一个 SaSsoProcessor 请求处理器
|
||||
*/
|
||||
public static SaSsoProcessor ssoUserProcessor = new SaSsoProcessor();
|
||||
static {
|
||||
// 自定义一个 SaSsoTemplate 对象
|
||||
SaSsoTemplate ssoUserTemplate = new SaSsoTemplate() {
|
||||
// 使用的会话对象 是自定义的 StpUserUtil
|
||||
@Override
|
||||
public StpLogic getStpLogic() {
|
||||
return StpUserUtil.stpLogic;
|
||||
}
|
||||
};
|
||||
// 让这个SSO请求处理器,使用的路由前缀是 /sso-user,而不是原先的 /sso
|
||||
ssoUserTemplate.apiName.replacePrefix("/sso-user");
|
||||
|
||||
// 给这个 SSO 请求处理器使用自定义的 SaSsoTemplate 对象
|
||||
ssoUserProcessor.ssoTemplate = ssoUserTemplate;
|
||||
}
|
||||
|
||||
/*
|
||||
* 第二套 sso-server 服务:处理所有SSO相关请求
|
||||
* http://{host}:{port}/sso-user/auth -- 单点登录授权地址,接受参数:redirect=授权重定向地址
|
||||
* http://{host}:{port}/sso-user/doLogin -- 账号密码登录接口,接受参数:name、pwd
|
||||
* http://{host}:{port}/sso-user/checkTicket -- Ticket校验接口(isHttp=true时打开),接受参数:ticket=ticket码、ssoLogoutCall=单点注销回调地址 [可选]
|
||||
* http://{host}:{port}/sso-user/signout -- 单点注销地址(isSlo=true时打开),接受参数:loginId=账号id、secretkey=接口调用秘钥
|
||||
*/
|
||||
@RequestMapping("/sso-user/*")
|
||||
public Object ssoUserRequest() {
|
||||
return ssoUserProcessor.serverDister();
|
||||
}
|
||||
|
||||
// 自定义 doLogin 方法 */
|
||||
// 注意点:
|
||||
// 1、第2套 sso-server 对应的 RestApi 登录接口也应该更换为 /sso-user/doLogin,而不是原先的 /sso/doLogin
|
||||
// 2、在这里,登录函数要使用自定义的 StpUserUtil.login(),而不是原先的 StpUtil.login()
|
||||
@RequestMapping("/sso-user/doLogin")
|
||||
public Object ssoUserRequest(String name, String pwd) {
|
||||
if("sa".equals(name) && "123456".equals(pwd)) {
|
||||
StpUserUtil.login(10001);
|
||||
return SaResult.ok("登录成功!").setData(StpUtil.getTokenValue());
|
||||
}
|
||||
return SaResult.error("登录失败!");
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
<br/>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>还有其它问题?</summary>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user