diff --git a/sa-token-doc/sso/sso-check-domain.md b/sa-token-doc/sso/sso-check-domain.md index 96caff48..db82615d 100644 --- a/sa-token-doc/sso/sso-check-domain.md +++ b/sa-token-doc/sso/sso-check-domain.md @@ -3,7 +3,7 @@ --- ### 1、Ticket劫持攻击 -在前面章节的 SSO-Server 示例中,配置项 `sa-token.sso.allow-url=*` 意为配置所有允许的Client端授权地址,不在此配置项中的URL将无法单点登录成功 +在前面章节的 SSO-Server 示例中,配置项 `sa-token.sso-server.allow-url=*` 意为配置所有允许的Client端授权地址,不在此配置项中的URL将无法单点登录成功 为了方便测试,上述代码将其配置为`*`,但是,在生产环境中,此配置项绝对不能配置为 * ,否则会有被 Ticket 劫持的风险 @@ -26,7 +26,7 @@ ``` yaml sa-token: - sso: + sso-server: # 配置允许单点登录的 url allow-url: http://sa-sso-client1.com:9001/sso/login ``` diff --git a/sa-token-doc/sso/sso-custom-api.md b/sa-token-doc/sso/sso-custom-api.md index ea6d933e..fb734e82 100644 --- a/sa-token-doc/sso/sso-custom-api.md +++ b/sa-token-doc/sso/sso-custom-api.md @@ -15,7 +15,7 @@ public class SsoServerController { // SSO-Server端:处理所有SSO相关请求 @RequestMapping("/sso/*") public Object ssoRequest() { - return SaSsoProcessor.instance.serverDister(); + return SaSsoServerProcessor.instance.dister(); } // ... 其它代码 @@ -33,13 +33,13 @@ public class SsoServerController { ``` java // 配置SSO相关参数 @Autowired -private void configSso(SaSsoConfig sso) { +private void configSso(SaSsoServerConfig ssoServer) { // 自定义API地址 - SaSsoUtil.ssoTemplate.apiName.ssoAuth = "/sso/auth2"; + SaSsoServerProcessor.instance.ssoServerTemplate.apiName.ssoAuth = "/sso/auth2"; // ... // SSO 相关配置 - sso.setXxx ... ; + ssoServer.xxx ... ; } ``` @@ -61,25 +61,25 @@ public class SsoServerController { // SSO-Server:统一认证地址 @RequestMapping("/sso/auth") public Object ssoAuth() { - return SaSsoProcessor.instance.ssoAuth(); + return SaSsoServerProcessor.instance.ssoAuth(); } // SSO-Server:RestAPI 登录接口 @RequestMapping("/sso/doLogin") public Object ssoDoLogin() { - return SaSsoProcessor.instance.ssoDoLogin(); + return SaSsoServerProcessor.instance.ssoDoLogin(); } // SSO-Server:校验ticket 获取账号id @RequestMapping("/sso/checkTicket") public Object ssoCheckTicket() { - return SaSsoProcessor.instance.ssoCheckTicket(); + return SaSsoServerProcessor.instance.ssoCheckTicket(); } // SSO-Server:单点注销 @RequestMapping("/sso/signout") public Object ssoSignout() { - return SaSsoProcessor.instance.ssoSignout(); + return SaSsoServerProcessor.instance.ssoSignout(); } // ... 其它方法 diff --git a/sa-token-doc/sso/sso-custom-login.md b/sa-token-doc/sso/sso-custom-login.md index bf5dfbf1..95638d58 100644 --- a/sa-token-doc/sso/sso-custom-login.md +++ b/sa-token-doc/sso/sso-custom-login.md @@ -81,16 +81,16 @@ if(res.code == 401) { ``` java // 配置:未登录时返回的View -sso.setNotLoginView(() -> { +sso.notLoginView = () -> { return new ModelAndView("xxx.html"); -}) +} ``` ### 3、如何自定义登录API的接口地址? 根据需求点选择解决方案: -#### 3.1、如果只是想在 setDoLoginHandle 函数里获取除 name、pwd 以外的参数? +#### 3.1、如果只是想在 doLoginHandle 函数里获取除 name、pwd 以外的参数? ``` java // 在任意代码处获取前端提交的参数 String xxx = SaHolder.getRequest().getParam("xxx"); diff --git a/sa-token-doc/sso/sso-h5.md b/sa-token-doc/sso/sso-h5.md index 6f4f2eb6..22d8d8a3 100644 --- a/sa-token-doc/sso/sso-h5.md +++ b/sa-token-doc/sso/sso-h5.md @@ -30,7 +30,7 @@ public class H5Controller { // 根据ticket进行登录 @RequestMapping("/sso/doLoginByTicket") public SaResult doLoginByTicket(String ticket) { - Object loginId = SaSsoProcessor.instance.checkTicket(ticket, "/sso/doLoginByTicket"); + Object loginId = SaSsoClientProcessor.instance.checkTicketByMode2Or3(ticket, "/sso/doLoginByTicket"); if(loginId != null) { StpUtil.login(loginId); return SaResult.data(StpUtil.getTokenValue()); @@ -122,14 +122,14 @@ public class H5Controller { ``` yaml sa-token: - sso: + sso-client: # SSO-Server端 统一认证地址 auth-url: http://127.0.0.1:8848/sa-token-demo-sso-server-h5/sso-auth.html ``` ``` properties # SSO-Server端 统一认证地址 -sa-token.sso.auth-url=http://127.0.0.1:8848/sa-token-demo-sso-server-h5/sso-auth.html +sa-token.sso-client.auth-url=http://127.0.0.1:8848/sa-token-demo-sso-server-h5/sso-auth.html ``` diff --git a/sa-token-doc/sso/sso-home-jump.md b/sa-token-doc/sso/sso-home-jump.md index a5a8f8d3..a8c6e405 100644 --- a/sa-token-doc/sso/sso-home-jump.md +++ b/sa-token-doc/sso/sso-home-jump.md @@ -75,7 +75,7 @@ public Object ssoRequest() { if(req.isPath("/sso/auth") && req.hasParam("redirect") == false && StpUtil.isLogin()) { return SaHolder.getResponse().redirect("/home"); } - return SaSsoProcessor.instance.serverDister(); + return SaSsoServerProcessor.instance.serverDister(); } ``` diff --git a/sa-token-doc/sso/sso-questions.md b/sa-token-doc/sso/sso-questions.md index d3ef9aa9..cbd73f4a 100644 --- a/sa-token-doc/sso/sso-questions.md +++ b/sa-token-doc/sso/sso-questions.md @@ -212,19 +212,23 @@ public class SsoController { // 处理 SSO-Server 端所有请求 @RequestMapping({"/sso/auth", "/sso/doLogin", "/sso/checkTicket", "/sso/signout"}) public Object ssoServerRequest() { - return SaSsoProcessor.instance.serverDister(); + return SaSsoServerProcessor.instance.dister(); } // 处理 SSO-Client 端所有请求 @RequestMapping({"/sso/login", "/sso/logout", "/sso/logoutCall"}) public Object ssoClientRequest() { - return SaSsoProcessor.instance.clientDister(); + return SaSsoClientProcessor.instance.dister(); } // 配置SSO相关参数 @Autowired - private void configSso(SaSsoConfig sso) { - // SSO配置代码,参考文档前几章 ... + private void configSsoServer(SaSsoServerConfig ssoServer) { + // SSO Server 配置代码,参考文档前几章 ... + } + @Autowired + private void configSsoClient(SaSsoClientConfig ssoClient) { + // SSO Client 配置代码,参考文档前几章 ... } } @@ -248,58 +252,58 @@ public class SsoController { @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; - } + /** + * 新建一个 SaSsoServerProcessor 请求处理器 + */ + public static SaSsoServerProcessor ssoUserServerProcessor = new SaSsoServerProcessor(); + static { + // 自定义一个 SaSsoTemplate 对象 + SaSsoServerTemplate ssoUserTemplate = new SaSsoServerTemplate() { + // 使用的会话对象 是自定义的 StpUserUtil + @Override + public StpLogic getStpLogic() { + return StpUserUtil.stpLogic; + } // 使用自定义的签名秘钥 SaSignConfig signConfig = new SaSignConfig().setSecretKey("xxxx-新的秘钥-xxxx"); SaSignTemplate userSignTemplate = new SaSignTemplate().setSignConfig(signConfig); @Override - public SaSignTemplate getSignTemplate() { + public SaSignTemplate getSignTemplate(String client) { return userSignTemplate; } - }; - // 让这个SSO请求处理器,使用的路由前缀是 /sso-user,而不是原先的 /sso - ssoUserTemplate.apiName.replacePrefix("/sso-user"); - - // 给这个 SSO 请求处理器使用自定义的 SaSsoTemplate 对象 - ssoUserProcessor.ssoTemplate = ssoUserTemplate; - } + }; + // 让这个SSO请求处理器,使用的路由前缀是 /sso-user,而不是原先的 /sso + ssoUserTemplate.apiName.replacePrefix("/sso-user"); - /* - * 第二套 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(); - } + // 给这个 SSO 请求处理器使用自定义的 SaSsoTemplate 对象 + ssoUserServerProcessor.ssoServerTemplate = 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 ssoUserServerProcessor.dister(); + } + + // 自定义 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(StpUserUtil.getTokenValue()); + } + return SaResult.error("登录失败!"); + } - // 自定义 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(StpUserUtil.getTokenValue()); - } - return SaResult.error("登录失败!"); - } - } ```