以编程方式更改spring security logout-success-url

mko*_*yak 5 spring-security

我需要根据用户的角色将用户重定向到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>
Run Code Online (Sandbox Code Playgroud)

mko*_*yak 2

我找不到任何正确的方法来做到这一点,所以我最终采用了一种 hack:

  1. invalidate-session
  2. 更改logout-success-url为特殊重定向控制器
  3. 在该控制器中,拉取用户会话以告诉用户类型
  4. 使会话无效
  5. 重定向到用户类型的正确 URL