Spring Security - 注销时获取用户名

Abh*_*jee 1 spring-security logout

如何获取用户名或UserDetail对象logout-success-url?以下是我的配置:

<form-login default-target-url="/security/loginSuccess.action" 
            always-use-default-target="false" 
            authentication-failure-url="/security/loginFailed.action"
            login-page="/security/restrictUser.action"/>    

<logout invalidate-session="true" logout-success-url="/security/logoutUser.action" />

<session-management 
  session-authentication-strategy-ref="customMsgAwareConcurrentSessionControlStartegy" 
  invalid-session-url="/security/logoutUser.action"/>
Run Code Online (Sandbox Code Playgroud)

我想获得请求注销的用户名logout-success-url(对我而言,这是一个Struts 2操作方法).我已经检查过SecurityContextHolder,但是SecurityContextHolder当控件到达我的动作方法时,它似乎已被清除logout-success-url.

Ale*_*r M 6

使用自定义LogoutSuccessHandler.在配置中定义bean success-handler-ref<logout>tag 和use 属性.

<logout success-handler-ref="customLogoutSuccessHandler" />
<beans:bean id="customLogoutSuccessHandler" class="..." />
Run Code Online (Sandbox Code Playgroud)

里面CustomLogoutSuccessHandleronLogoutSuccess方法有Authentication争论.

public class CustomLogoutSuccessHandler extends
    AbstractAuthenticationTargetUrlRequestHandler implements
    LogoutSuccessHandler {

    public void onLogoutSuccess(HttpServletRequest request,
        HttpServletResponse response, Authentication authentication)
        throws IOException, ServletException {
         // use authentication to get user name
    }
}
Run Code Online (Sandbox Code Playgroud)