【发布时间】:2020-06-08 00:14:00
【问题描述】:
我有两个端点,/health 和 /save。我不想为 /health 端点调用 MyFilter。 下面是代码
@Component
public class MyFilter implements Filter {
@Autowired
private JwtConfig jwtConfig;
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
// do something
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Configuration
@Order(2)
public class WebSecurityConfig extends DefaultSecurityConfig {
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.cors().and().csrf().disable().addFilterAfter(new MyFilter(), BasicAuthenticationFilter.class)
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Override
public void configure(WebSecurity webSecurity) throws Exception {
super.configure(webSecurity);
webSecurity.ignoring().antMatchers("/health/**");
}
@Bean
CorsConfigurationSource corsConfigurationSource() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
return source;
}
}
问题是如果我从 MyFilter 中删除 @component,过滤器不会被任何端点调用,如果我把它放回去,它会在两个端点中调用。如何使其仅适用于 /health 端点?
【问题讨论】:
-
定义一个
@Bean方法返回您的过滤器(而不是使用@Component)并添加一个额外的FilterRegistrationBean来选择应该反应的 URL。如果这需要成为 Spring Security 过滤器链的一部分,请检查过滤器内的 URL 并决定是否需要做一件事或其他。
标签: spring spring-boot spring-security servlet-filters