Как я могу добавить собственный обработчик выхода в LogoutFilter в spring -security? Спасибо!
Spring безопасность настроить обработчик выхода из системы
Ответ 1
Следующее решение работает для меня и может быть полезным:
-
Разверните SimpleUrlLogoutSuccessHandler или выполните LogoutHandler:
public class LogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler { // Just for setting the default target URL public LogoutSuccessHandler(String defaultTargetURL) { this.setDefaultTargetUrl(defaultTargetURL); } @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { // do whatever you want super.onLogoutSuccess(request, response, authentication); } }
-
Добавьте в свою конфигурацию безопасности Spring:
<security:logout logout-url="/logout" success-handler-ref="logoutSuccessHandler" /> <bean id="logoutSuccessHandler" class="your.package.name.LogoutSuccessHandler" > <constructor-arg value="/putInYourDefaultTargetURLhere" /> </bean>
Ответ 2
См. ответ в этот пост в форуме безопасности Spring:
Определение XML:
<beans:bean id="logoutFilter" class="org.springframework.security.ui.logout.LogoutFilter">
<custom-filter position="LOGOUT_FILTER"/>
<beans:constructor-arg index="0" value="/logout.jsp"/>
<beans:constructor-arg index="1">
<beans:list>
<beans:ref bean="securityContextLogoutHandler"/>
<beans:ref bean="myLogoutHandler"/>
</beans:list>
</beans:constructor-arg>
</beans:bean>
<beans:bean id="securityContextLogoutHandler" class="org.springframework.security.ui.logout.SecurityContextLogoutHandler"/>
<beans:bean id="myLogoutHandler" class="com.whatever.CustomLogoutHandler">
<beans:property name="userCache" ref="userCache"/>
</beans:bean>
LogoutHandler class:
public class CustomLogoutHandler implements LogoutHandler {
private UserCache userCache;
public void logout(final HttpServletRequest request, final HttpServletResponse response, final Authentication authentication) {
// ....
}
@Required
public void setUserCache(final UserCache userCache) {
this.userCache = userCache;
}
}
Ответ 3
Вы должны использовать атрибут success-handler-ref
элемента <logout>
:
<security:logout invalidate-session="true"
success-handler-ref="myLogoutHandler"
logout-url="/logout" />
В качестве альтернативного решения вы можете настроить свой собственный фильтр на URL выхода.