【发布时间】:2017-04-20 01:50:24
【问题描述】:
我有一个基于 spring 的 web 应用程序,当满足某些条件时,我需要用户自动注销。我希望获得与用户导航到<security:logout logout-url="url" success-handler-ref="handler" /> 中配置的logout-url 相同的效果。
据我了解,这发生在 LogoutFilter 中,其中调用了为此过滤器定义的所有 LogoutHandlers。
我的想法是创建LogoutFilter的子类,这样我就可以在requiresLogout(HttpServletRequest request, HttpServletResponse response)方法中实现自己的逻辑:
public class CustomLogoutFilter extends LogoutFilter {
public CustomLogoutFilter(LogoutSuccessHandler logoutSuccessHandler, LogoutHandler... handlers) {
super(logoutSuccessHandler, handlers);
}
public CustomLogoutFilter(String logoutSuccessUrl, LogoutHandler... handlers) {
super(logoutSuccessUrl, handlers);
}
@Override
protected boolean requiresLogout(HttpServletRequest request, HttpServletResponse response) {
boolean result = super.requiresLogout(request, response);
result &= isCustomCondition();
return result;
}
private boolean isCustomCondition(){
// evaluate custom condition and return the value
}
}
我尝试将 CustomLogoutFilter 声明为 bean,并将 LogoutFilter 作为其父级,但这似乎不起作用。
是否可以配置CustomLogoutFilter 以供网络应用使用,而不是标准的LogoutFilter?有没有推荐的方法来实现这个逻辑?
我正在使用 spring-security v. 3.2.5。
【问题讨论】:
-
你认为实现自定义
RequestMatcher就足够了吗? -
是的,这是一个可能的解决方案。是否可以配置 Spring 以使
LogoutFilter使用我的customLogoutRequestMatcher而不是在过滤器类中定义的默认logoutRequestMatcher?
标签: java spring spring-security servlet-filters logout