Spring Security - получить имя пользователя при выходе

Как получить имя пользователя или 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"/>

Я хочу получить имя пользователя, который запросил выход из системы в течение logout-success-url (для меня это метод действий Struts 2). я проверил SecurityContextHolder, но кажется, что SecurityContextHolder очищается, когда элемент управления достигает моего метода действия в logout-success-url,

1 ответ

Решение

Использовать пользовательские LogoutSuccessHandler для этого. Внутри вашей конфигурации определите bean и используйте success-handler-ref атрибут <logout> тег.

<logout success-handler-ref="customLogoutSuccessHandler" />
<beans:bean id="customLogoutSuccessHandler" class="..." />

И внутри CustomLogoutSuccessHandler есть onLogoutSuccess метод, который имеет 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
    }
}
Другие вопросы по тегам