From ad79e3595e3c2e79a45617022231aa1f0c88747a Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Wed, 1 Sep 2021 00:44:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=96=B0=E5=A2=9ESSO?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89API=E8=B7=AF=E7=94=B1=E7=9A=84?= =?UTF-8?q?=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/_sidebar.md | 1 + sa-token-doc/doc/sso/sso-custom-api.md | 90 ++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 sa-token-doc/doc/sso/sso-custom-api.md diff --git a/sa-token-doc/doc/_sidebar.md b/sa-token-doc/doc/_sidebar.md index 7ffdfc0f..21659460 100644 --- a/sa-token-doc/doc/_sidebar.md +++ b/sa-token-doc/doc/_sidebar.md @@ -39,6 +39,7 @@ - [SSO模式三 Http请求获取会话](/sso/sso-type3) - [SSO整合:配置域名校验](/sso/sso-check-domain) - [SSO整合:定制化登录页面](/sso/sso-custom-login) + - [SSO整合:自定义API路由](/sso/sso-custom-api) - [SSO整合:前后端分离下的整合方案](/sso/sso-h5) - [SSO整合:常见问题总结](/sso/sso-questions) - [Sa-Sso-Pro:单点登录商业版](/sso/sso-pro) diff --git a/sa-token-doc/doc/sso/sso-custom-api.md b/sa-token-doc/doc/sso/sso-custom-api.md new file mode 100644 index 00000000..432ade84 --- /dev/null +++ b/sa-token-doc/doc/sso/sso-custom-api.md @@ -0,0 +1,90 @@ +# SSO整合-自定义 API 路由 + +--- + +### 方式一:修改全局变量 + +在之前的章节中,我们演示了如何搭建一个SSO认证中心: +``` java +/** + * Sa-Token-SSO Server端 Controller + */ +@RestController +public class SsoServerController { + + // SSO-Server端:处理所有SSO相关请求 + @RequestMapping("/sso/*") + public Object ssoRequest() { + return SaSsoHandle.serverRequest(); + } + + // ... 其它方法 + +} +``` + +这种写法集成简单但却不够灵活。例如认证中心地址只能是:`http://{host}:{port}/sso/auth`,如果我们想要自定义其API地址,应该怎么做呢? + +我们可以打开SSO模块相关源码,有关 API 的设计都定义在:[SaSsoConsts.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-core/src/main/java/cn/dev33/satoken/sso/SaSsoConsts.java) +中,这些值从架构设计上来讲属于常量却并未使用 `final` 修饰,目的就是为了方便我们对其二次修改。 + +例如,我们可以在 Main 方法启动类或者 SSO 配置方法中修改变量值: +``` java +// 配置SSO相关参数 +@Autowired +private void configSso(SaTokenConfig cfg) { + // 自定义API地址 + SaSsoConsts.Api.ssoAuth = "/sso/auth2"; + // ... + + // SSO 相关配置 + cfg.sso.setXxx ... ; +} +``` + +启动项目,统一认证地址就被我们修改成了:`http://{host}:{port}/sso/auth2` + + +### 方式二:拆分路由入口 +根据上述路由入口:`@RequestMapping("/sso/*")`,我们给它起一个合适的名字 —— 聚合式路由。 + +与之对应的,我们可以将其修改为拆分式路由: + +``` java +/** + * Sa-Token-SSO Server端 Controller + */ +@RestController +public class SsoServerController { + + // SSO-Server:统一认证地址 + @RequestMapping("/sso/auth") + public Object ssoAuth() { + return SaSsoHandle.ssoAuth(); + } + + // SSO-Server:RestAPI 登录接口 + @RequestMapping("/sso/doLogin") + public Object ssoDoLogin() { + return SaSsoHandle.ssoDoLogin(); + } + + // SSO-Server:校验ticket 获取账号id + @RequestMapping("/sso/checkTicket") + public Object ssoCheckTicket() { + return SaSsoHandle.ssoCheckTicket(); + } + + // SSO-Server:单点注销 + @RequestMapping("/sso/logout") + public Object ssoLogout() { + return SaSsoHandle.ssoServerLogout(); + } + + // ... 其它方法 + +} +``` + +拆分式路由 与 聚合式路由 在功能上完全等价,且提供了更为细致的路由管控。 +