Spring security 以编程方式更改spring安全注销成功url

Spring security 以编程方式更改spring安全注销成功url,spring-security,Spring Security,我需要根据用户的角色将其重定向到两个不同的注销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 patter

我需要根据用户的角色将其重定向到两个不同的注销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>

编辑-更新为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);
}
public void doFilterHttp(HttpServletRequest请求、HttpServletResponse响应、FilterChain链)抛出IOException,
ServletException{
if(要求注销(请求、响应)){
Authentication auth=SecurityContextHolder.getContext().getAuthentication();
if(logger.isDebugEnabled()){
debug(“注销用户”'+auth+“'并重定向到注销页面”);
}
for(int i=0;i
按如下方式更换注销过滤器:

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

我找不到任何正确的方法来做这件事,所以我最终遭到了一次黑客攻击:

  • 不要使会话无效
  • 注销成功url
    更改为特殊重定向控制器
  • 在该控制器中,拉动用户会话以告知用户类型
  • 使会话无效
  • 重定向到用户类型的正确url

  • 遗憾的是,3.0中添加了
    successhandler ref
    属性