我有一个自定义过滤器,在BasicAuthenticationFilter之前被调用,该Bean在SecurityConfig文件中进行了自动装配。
.addFilterBefore(preAuthTenantContextInitializerFilter, BasicAuthenticationFilter.class)
这是过滤器的外观。
@Component
public class PreAuthTenantContextInitializerFilter extends OncePerRequestFilter {
@Autowired
private TenantService tenantService;
.....
.....
我希望这个过滤器不像Spring Security过滤器链中的其他过滤器一样触发,对于在WebSecurityConfigurerAdapter#configure(WebSecurity web) web.ignoring()中包含的路径。以下是它的外观。
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources",
"/configuration/security", "/swagger-ui.html",
"/webjars/**","/swagger-resources/configuration/ui",
"/swagger-ui.html", "/docs/**");
}
}
我已经尝试过的。
从过滤器类中删除@Component注释,因为过滤器不再作为bean选取,也永远不会进入过滤器链并触发。
我正在寻找的
我希望这个过滤器在调用Spring安全链的其余部分时被调用,并且像其他Spring安全过滤器一样,在web.ignoring()中忽略路径。谢谢。
OncePerRequestFilter
的扩展,它只会执行一次,基本上在安全过滤器链中配置的入口什么也不做。要修复它,请勿将其设置为bean并自己连接依赖项。这样,Spring Boot就不会检测到它,它将只成为Spring Security过滤器链的一部分,而不是常规过滤器链的一部分。或者为过滤器添加一个FilterRegistrationBean
,并将enabled
设置为false
以防止它被自动注册。 - M. Deinum