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
}
}