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;
}
我目前正在检查所有传入的 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;
}