From 2c39fc72099fa8bef741a484df8bb1acbae31cff Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Sat, 23 Apr 2022 17:08:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/dev33/satoken/sso/SaSsoTemplate.java | 11 +++++++++-- sa-token-doc/doc/_sidebar.md | 2 +- sa-token-doc/doc/plugin/jwt-extend.md | 4 ++-- sa-token-doc/doc/up/many-account.md | 6 +++--- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java b/sa-token-core/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java index ef082025..970fabae 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java @@ -166,8 +166,15 @@ public class SaSsoTemplate { back = (back == null ? "" : back); back = SaFoxUtil.encodeUrl(back); - // 拼接最终地址,格式示例:serverAuthUrl = http://xxx.com?redirectUrl=xxx.com?back=xxx.com - clientLoginUrl = SaFoxUtil.joinParam(clientLoginUrl, ParamName.back, back); + // 开始拼接 sso 统一认证地址,形如:serverAuthUrl = http://xxx.com?redirectUrl=xxx.com?back=xxx.com + + /* + * 部分 Servlet 版本 request.getRequestURL() 返回的 url 带有 query 参数,形如:http://domain.com?id=1, + * 如果不加判断会造成最终生成的 serverAuthUrl 带有双 back 参数 ,这个 if 判断正是为了解决此问题 + */ + if(clientLoginUrl.indexOf(ParamName.back + "=" + back) == -1) { + clientLoginUrl = SaFoxUtil.joinParam(clientLoginUrl, ParamName.back, back); + } String serverAuthUrl = SaFoxUtil.joinParam(serverUrl, ParamName.redirect, clientLoginUrl); // 返回 diff --git a/sa-token-doc/doc/_sidebar.md b/sa-token-doc/doc/_sidebar.md index 4b71ccf4..d04967d6 100644 --- a/sa-token-doc/doc/_sidebar.md +++ b/sa-token-doc/doc/_sidebar.md @@ -29,7 +29,7 @@ - [会话治理](/up/search-session) - [全局侦听器](/up/global-listener) - [全局过滤器](/up/global-filter) - - [多账号认证](/up/many-account) + - [多账户认证](/up/many-account) - **单点登录** diff --git a/sa-token-doc/doc/plugin/jwt-extend.md b/sa-token-doc/doc/plugin/jwt-extend.md index 44689dbb..b5a90f9f 100644 --- a/sa-token-doc/doc/plugin/jwt-extend.md +++ b/sa-token-doc/doc/plugin/jwt-extend.md @@ -50,7 +50,7 @@ Mix 模式:混入部分逻辑 ``` java @Configuration public class SaTokenConfigure { - // Sa-Token 整合 jwt (Style模式) + // Sa-Token 整合 jwt (Mix模式) @Bean public StpLogic getStpLogicJwt() { return new StpLogicJwtForMix(); @@ -63,7 +63,7 @@ Stateless 模式:服务器完全无状态 ``` java @Configuration public class SaTokenConfigure { - // Sa-Token 整合 jwt (Style模式) + // Sa-Token 整合 jwt (Stateless模式) @Bean public StpLogic getStpLogicJwt() { return new StpLogicJwtForStateless(); diff --git a/sa-token-doc/doc/up/many-account.md b/sa-token-doc/doc/up/many-account.md index b8107280..e32d3518 100644 --- a/sa-token-doc/doc/up/many-account.md +++ b/sa-token-doc/doc/up/many-account.md @@ -1,11 +1,11 @@ -# 多账号认证 +# 多账户认证 --- ### 0、需求场景 有的时候,我们会在一个项目中设计两套账号体系,比如一个电商系统的 `user表` 和 `admin表`, 在这种场景下,如果两套账号我们都使用 `StpUtil` 类的API进行登录鉴权,那么势必会发生逻辑冲突 -在Sa-Token中,这个问题的模型叫做:多账号体系认证 +在Sa-Token中,这个问题的模型叫做:多账户体系认证 要解决这个问题,我们必须有一个合理的机制将这两套账号的授权给区分开,让它们互不干扰才行 @@ -55,7 +55,7 @@ public class StpUserUtil { > 成品样例参考:[码云 StpUserUtil.java](https://gitee.com/dromara/sa-token/blob/dev/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/at/StpUserUtil.java) -### 4、在多账号模式下使用注解鉴权 +### 4、在多账户模式下使用注解鉴权 框架默认的注解鉴权 如`@SaCheckLogin` 只针对原生`StpUtil`进行鉴权 例如,我们在一个方法上加上`@SaCheckLogin`注解,这个注解只会放行通过`StpUtil.login(id)`进行登录的会话,