使用 __url 参数统一管理成功跳转地址

This commit is contained in:
thinkgem
2024-07-06 10:23:10 +08:00
parent 09d2af2491
commit 9b4b4affa0

View File

@@ -261,21 +261,19 @@ public class FormFilter extends org.apache.shiro.web.filter.authc.FormAuthentica
protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception { protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception {
// 是否在登录后生成新的Session默认false // 是否在登录后生成新的Session默认false
if (Global.getPropertyToBoolean("shiro.isGenerateNewSessionAfterLogin", "false")){ if (Global.getPropertyToBoolean("shiro.isGenerateNewSessionAfterLogin", "false")){
String[] keys = new String[] {ValidCodeUtils.VALID_CODE}; String[] keys = new String[] { ValidCodeUtils.VALID_CODE };
Map<String, Object> map = MapUtils.newHashMap(); Map<String, Object> attrMap = MapUtils.newHashMap();
final Session sessionOld = UserUtils.getSession(); final Session sessionOld = UserUtils.getSession();
for (String key : keys) { for (String key : keys) {
Object value = sessionOld.getAttribute(key); Object value = sessionOld.getAttribute(key);
if (value != null) { if (value != null) {
map.put(key, value); attrMap.put(key, value);
} }
} }
UserUtils.getSubject().logout(); UserUtils.getSubject().logout();
// 恢复生成新的Session之前的Session数据 // 恢复生成新的Session之前的Session数据
final Session sessionNew = UserUtils.getSession(); final Session sessionNew = UserUtils.getSession();
map.forEach((key, value) -> { attrMap.forEach(sessionNew::setAttribute);
sessionNew.setAttribute(key, value);
});
} }
return super.executeLogin(request, response); return super.executeLogin(request, response);
} }
@@ -300,15 +298,10 @@ public class FormFilter extends org.apache.shiro.web.filter.authc.FormAuthentica
HttpServletRequest request = (HttpServletRequest)servletRequest; HttpServletRequest request = (HttpServletRequest)servletRequest;
// 登录成功后初始化授权信息并处理登录后的操作 // 登录成功后初始化授权信息并处理登录后的操作
authorizingRealm.onLoginSuccess(UserUtils.getLoginInfo(), request); authorizingRealm.onLoginSuccess(UserUtils.getLoginInfo(), request);
// 跳转到登录成功页面 // 跳转到登录成功页面,若未指定则获取默认 shiro.successUrl in application.yml
String successUrl = getSuccessUrl(); // shiro.successUrl in application.yml String successUrl = (String)request.getAttribute("__url");
if (StringUtils.contains((request).getRequestURI(), "/oauth2/callback/")) { if (StringUtils.isBlank(successUrl)) {
successUrl = Global.getConfig("oauth2.successUrl", successUrl); successUrl = getSuccessUrl();
} else if (StringUtils.contains((request).getRequestURI(), "/sso")) {
String ssoSuccessUrl = (String)request.getAttribute("__url");
if (StringUtils.isNotBlank(ssoSuccessUrl)) {
successUrl = ssoSuccessUrl;
}
} }
ServletUtils.redirectUrl(request, (HttpServletResponse)response, successUrl); ServletUtils.redirectUrl(request, (HttpServletResponse)response, successUrl);
return false; return false;