代码之家  ›  专栏  ›  技术社区  ›  Deniss M.

Spring OAuth2身份验证服务器:一个特定的/oauth/令牌过滤器?

  •  1
  • Deniss M.  · 技术社区  · 6 年前

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

    问题是此筛选器正在处理进入服务器的所有请求。我只想处理 /oauth/token 端点。

    可以在Spring OAuth2 Auth Server中实现吗?

    3 回复  |  直到 6 年前
        1
  •  6
  •   Jose Martinez    6 年前

    您的问题有两个方面,一个是过滤顺序,另一个是只过滤特定的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
  •  1
  •   Oreste Viron    6 年前

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

    @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
    

    到您的Web安全配置应该对您有所帮助。

        3
  •  1
  •   Tom    6 年前

    如果自定义筛选器扩展 OncePerRequestFilter 您可以覆盖 shouldNotFilter 方法

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

    来自文档

    可以在自定义筛选控件的子类中重写,返回true以避免筛选给定的请求。