Spring boot 如何在特定端点上应用无过滤器

Spring boot 如何在特定端点上应用无过滤器,spring-boot,spring-security,Spring Boot,Spring Security,我正在为web应用程序使用spring引导和spring安全性。我想在我的公共API上申请无过滤器。现在我要做的是对客户端发送的路径和我有硬代码的路径进行相等性检查,如果相等,那么我不应用过滤器 代码示例 protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { return request.getRequestURI().equals("api/v1/publ

我正在为web应用程序使用spring引导和spring安全性。我想在我的公共API上申请无过滤器。现在我要做的是对客户端发送的路径和我有硬代码的路径进行相等性检查,如果相等,那么我不应用过滤器

代码示例

protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
    return request.getRequestURI().equals("api/v1/public/hello"));
}

但这并不是一个好办法。如中所示,可以有多个公共端点,我不能对每个端点进行同等检查。我需要一个解决方案,在这个解决方案中,我可以将所有公共端点放在一个位置,当请求到来时,我只需在该位置进行检查,如果存在,则不会应用任何筛选器。

使用antMatcher排除您的公共域

http.cors().and().csrf().disable().authorizeRequests()
    .antMatchers("api/v1/public/**", "/health").permitAll()
    .anyRequest()..authenticated();

通常,关闭所有应用程序并打开所需端点是最佳安全实践。

假设您谈论的是Spring安全过滤器,并且您可能希望公开一些API

您可以使用
configure(WebSecurity-web
)或
configure(HttpSecurity-http)
方法来实现该目标。要防止应用筛选器,可以使用
configure(WebSecurity web)
方法。这将从安全过滤器链中完全忽略请求模式。请注意,与此路径匹配的任何内容都不会应用任何身份验证或授权服务,并且可以自由访问

@Override
public void configure(WebSecurity web) throws Exception {
    web
        .ignoring()
        .antMatchers("api/v1/public/**");
} 

您可以在此处浏览
configure(WebSecurity-web)和configure(HttpSecurity-http)