【问题标题】:Spring OAuth2 Auth Server: a specific /oauth/token filter?Spring OAuth2 Auth Server:特定的 /oauth/token 过滤器?
【发布时间】:2018-04-24 12:31:17
【问题描述】:

我目前正在检查所有传入的 Authorization 标头中的 JWT 令牌值,以便我可以检查这些令牌是否被列入黑名单。我为此实现了一个自定义Filter

问题是这个过滤器正在处理所有进入服务器的请求。我只想处理到达/oauth/token 端点的请求。

是否可以在 Spring OAuth2 Auth Server 中实现?

【问题讨论】:

  • 你是资源还是授权服务器?
  • @JoseMartinez 用于身份验证服务器。
  • 当您说“过滤掉”时,这是否意味着您希望您的过滤器忽略对“/oauth/token”的请求或您试图阻止的请求?
  • @JoseMartinez 抱歉,我措辞不正确。我只想处理传入oauth/token endpoint 的请求。

标签: java spring spring-oauth2


【解决方案1】:

您的问题有两个方面,一是过滤顺序,二是仅过滤特定的URL路径。两者都可以通过使用FilterRegistrationBean 注入您的过滤器来解决。请参见下面的示例。

@Bean
public FilterRegistrationBean securityFilter() {
    Filter f = new MySecurityFilter();
    FilterRegistrationBean frb = new FilterRegistrationBean(f);
    frb.setOrder(SecurityProperties.ACCESS_OVERRIDE_ORDER);
    frb.setUrlPatterns(Arrays.asList("/oauth/token"));
    return frb;
}

【讨论】:

  • 像魅力一样工作。谢谢!
【解决方案2】:

这是您过滤器的优先级问题。 添加:

@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 

对你的 WebSecurityConfiguration 应该有帮助。

【讨论】:

    【解决方案3】:

    如果您的自定义过滤器扩展了OncePerRequestFilter,您可以覆盖shouldNotFilter 方法。

    @Override
    protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
        return !new AntPathMatcher().match("/oauth/token", request.getServletPath());
    }
    

    来自文档

    可以在子类中重写以进行自定义过滤控制,返回 true 以避免过滤给定请求。

    【讨论】:

    • 自定义过滤器本身正在实现Filter接口。
    猜你喜欢
    • 2017-08-31
    • 2020-02-08
    • 2018-02-23
    • 2017-08-31
    • 2013-12-31
    • 2018-07-22
    • 2018-08-25
    • 2016-09-06
    • 2015-11-10
    相关资源
    最近更新 更多