【问题标题】:What is the recommended way to customize the LogoutFilter in Spring?在 Spring 中自定义 LogoutFilter 的推荐方法是什么?
【发布时间】: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


【解决方案1】:

如果您使用 Java 配置而不是 Security Namespace (XML) 配置,您可以编写自己的 RequestMatcher 并将它们添加到 LogoutFilter,请参阅 LogoutConfigurer#logoutRequestMatcher

触发注销发生的 RequestMatcher。在大多数情况下,用户会使用logoutUrl(String),这有助于实施良好的做法。

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2011-08-08
    • 2019-05-23
    • 2018-12-17
    • 2012-08-12
    • 2010-11-18
    相关资源
    最近更新 更多