spring-security - 以编程方式更改 Spring Security 注销成功 url

  显示原文与译文双语对照的内容
0 0

我需要将用户重定向到 2 不同注销url基于他的角色。 我 应该 如何 能够 实现 这 一点 呢? 。

我正在使用 Spring Security 2.0,我的xml看起来像这样:


 <s:http access-denied-page="/"> 
 <s:intercept-url pattern="/pages/SplashPage.jsf" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
 <s:intercept-url pattern="/pages/Home.jsf" access="ROLE_USER,ROLE_MERCHANT"/>

 <s:anonymous/>
 <s:form-login
 login-page="/"
 login-processing-url="/j_spring_security_check"
 default-target-url="/pages/Home.jsf"
 authentication-failure-url="/" always-use-default-target='false'/>
 <s:logout invalidate-session="true" logout-url="/pages/logout.jsf" logout-success-url="/"/>
 <s:concurrent-session-control max-sessions="1" exception-if-maximum-exceeded="false"/>
 </s:http>

时间: 原作者:

0 0

我找不到正确的方法,所以我结束了一个黑客:

  1. 不要 invalidate-session
  2. logout-success-url 更改为特殊重定向控制器
  3. 在该控制器中,拉用户会话以告知用户类型
  4. 使会话无效
  5. 重定向到usertype的正确网址
原作者:
0 0

编辑- 更新为 Spring Security 2.0解决方案。

将LogoutFilter替换为重写doFilterHttp的子类:


public void doFilterHttp(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException,
 ServletException {

 if (requiresLogout(request, response)) {
 Authentication auth = SecurityContextHolder.getContext().getAuthentication();

 if (logger.isDebugEnabled()) {
 logger.debug("Logging out user '" + auth +"' and redirecting to logout page");
 }

 for (int i = 0; i <handlers.length; i++) {
 handlers[i].logout(request, response, auth);
 }

//Do role-specific logic here to determine targetUrl

 sendRedirect(request, response, targetUrl);

 return;
 }

 chain.doFilter(request, response);
}

按如下所示替换 LogoutFilter:


<beans:bean id="myLogoutFilter" class="com.mycompany.MyLogoutFilter">
 <custom-filter position="LOGOUT_FILTER"/>
</beans:bean>

...