Spring OAuth2 验证服务器:特定的 /oauth/token 过滤器?

Spring OAuth2 Auth Server: a specific /oauth/token filter?

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

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

是否可以在 Spring OAuth2 授权服务器中实现?

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

@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 

你的 WebSecurityConfiguration 应该对你有帮助。

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

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

来自文档

Can be overridden in subclasses for custom filtering control, returning true to avoid filtering of the given request.

你的问题有两个方面,一是过滤顺序,二是只过滤特定的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;
}