Skip to content

Commit b214ca8

Browse files
优化代码及配置
1 parent 9e4d433 commit b214ca8

File tree

4 files changed

+28
-13
lines changed

4 files changed

+28
-13
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@
155155
<dependency>
156156
<groupId>junit</groupId>
157157
<artifactId>junit</artifactId>
158-
<version>4.12</version>
158+
<version>4.13.1</version>
159159
<scope>test</scope>
160160
</dependency>
161161
<dependency>
@@ -167,7 +167,7 @@
167167
<dependency>
168168
<groupId>org.apache.httpcomponents</groupId>
169169
<artifactId>httpmime</artifactId>
170-
<version>4.5.12</version>
170+
<version>4.5.13</version>
171171
<exclusions>
172172
<exclusion>
173173
<groupId>commons-codec</groupId>

src/main/java/net/ymate/module/sso/SingleSignOn.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public String getName() {
8686
public void initialize(IApplication owner) throws Exception {
8787
if (!initialized) {
8888
//
89-
YMP.showVersion("Initializing ymate-module-sso-${version}", new Version(2, 0, 0, SingleSignOn.class, Version.VersionType.Alpha));
89+
YMP.showVersion("Initializing ymate-module-sso-${version}", new Version(2, 0, 0, SingleSignOn.class, Version.VersionType.Release));
9090
//
9191
this.owner = owner;
9292
if (config == null) {

src/main/java/net/ymate/module/sso/controller/GeneralAuthController.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import net.ymate.platform.webmvc.annotation.RequestParam;
2727
import net.ymate.platform.webmvc.base.Type;
2828
import net.ymate.platform.webmvc.context.WebContext;
29+
import net.ymate.platform.webmvc.util.WebErrorCode;
2930
import net.ymate.platform.webmvc.util.WebUtils;
3031
import net.ymate.platform.webmvc.view.IView;
3132
import net.ymate.platform.webmvc.view.View;
@@ -44,7 +45,7 @@ public class GeneralAuthController {
4445
private SingleSignOn owner;
4546

4647
/**
47-
* 当存在跨域获取SSO令牌的情况时,需要调整SSO客户端的参数配置:webmvc.redirect_login_url=authorize?redirect_url=${redirect_url},服务端则仍保持原参数配置不变即可。
48+
* 当存在跨域获取SSO令牌的情况时,需要调整SSO客户端的参数配置:module.sso.token_invalid_redirect_url=authorize?redirect_url=${redirect_url},服务端则仍保持原参数配置不变即可。
4849
* <p>
4950
* 注意: 需要保证Cookie作用域名包含子域
5051
*
@@ -68,8 +69,12 @@ public IView authorize(@RequestParam(Type.Const.REDIRECT_URL) String redirectUrl
6869
// 当前服务端用户已登录,则重定向至redirectUrl地址
6970
return View.redirectView(redirectUrl);
7071
}
71-
// 当前服务端用户尚未登录,则重定向登录视图
72-
return View.redirectView(ExpressionUtils.bind(WebUtils.buildRedirectUrl(null, WebContext.getRequest(), redirectUrl, true))
73-
.set(Type.Const.REDIRECT_URL, WebUtils.encodeUrl(redirectUrl)).getResult());
72+
// 当前服务端用户尚未登录,则重定向登录视图,若未设置令牌无效重定向URL地址则直接显示错误提示视图
73+
String tokenInvalidRedirectUrl = owner.getConfig().getTokenInvalidRedirectUrl();
74+
if (StringUtils.isBlank(tokenInvalidRedirectUrl)) {
75+
return View.redirectView(ExpressionUtils.bind(WebUtils.buildRedirectUrl(null, WebContext.getRequest(), tokenInvalidRedirectUrl, true))
76+
.set(Type.Const.REDIRECT_URL, WebUtils.encodeUrl(redirectUrl)).getResult());
77+
}
78+
return WebUtils.buildErrorView(WebUtils.getOwner(), WebErrorCode.userSessionInvalidOrTimeout());
7479
}
7580
}

src/main/java/net/ymate/module/sso/impl/DefaultTokenAdapter.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.commons.logging.LogFactory;
3636

3737
import javax.crypto.BadPaddingException;
38+
import javax.servlet.http.HttpServletRequest;
3839
import javax.servlet.http.HttpServletResponse;
3940
import java.util.HashMap;
4041
import java.util.Map;
@@ -142,17 +143,26 @@ public boolean validateToken(IToken token) throws Exception {
142143
public IToken getToken() {
143144
IToken token = null;
144145
try {
146+
HttpServletRequest httpServletRequest = WebContext.getRequest();
145147
// 优先从请求参数中获取Token数据(一般用于API接口而非浏览器)
146-
token = decryptToken(WebContext.getRequest().getParameter(owner.getConfig().getTokenParamName()));
148+
token = decryptToken(httpServletRequest.getParameter(owner.getConfig().getTokenParamName()));
147149
if (token == null) {
148150
// 尝试从请求头中获取Token数据
149-
token = decryptToken(WebContext.getRequest().getHeader(owner.getConfig().getTokenHeaderName()));
151+
token = decryptToken(httpServletRequest.getHeader(owner.getConfig().getTokenHeaderName()));
150152
if (token == null) {
151-
// 尝试从Cookie中获取Token数据
152-
String tokenStr = CookieHelper.bind(WebContext.getContext().getOwner())
153-
.getCookie(owner.getConfig().getTokenCookieName())
154-
.toStringValue();
153+
// 兼容请求头:Authorization: Bearer <token>
154+
String tokenStr = StringUtils.trimToNull(httpServletRequest.getHeader(Type.HttpHead.AUTHORIZATION));
155+
if (StringUtils.startsWithIgnoreCase(tokenStr, "Bearer")) {
156+
tokenStr = StringUtils.trimToNull(StringUtils.substring(tokenStr, "Bearer".length()));
157+
}
155158
token = decryptToken(tokenStr);
159+
if (token == null) {
160+
// 尝试从Cookie中获取Token数据
161+
tokenStr = CookieHelper.bind(WebContext.getContext().getOwner())
162+
.getCookie(owner.getConfig().getTokenCookieName())
163+
.toStringValue();
164+
token = decryptToken(tokenStr);
165+
}
156166
}
157167
}
158168
} catch (Exception e) {

0 commit comments

Comments
 (0)