OncePerRequestFilter 根据路径过滤
时间: 2023-11-08 10:55:26 浏览: 33
OncePerRequestFilter是一个过滤器的实现类,它可以确保每个请求只会被执行一次。根据路径过滤可以通过在自定义的OncePerRequestFilter类上添加@WebFilter注解,并配置urlPatterns属性来实现。例如,可以使用@WebFilter(urlPatterns = "/selfAnnotation/*")来过滤以"/selfAnnotation/"开头的路径。
相关问题
OncePerRequestFilter过滤swagger
您可以通过在OncePerRequestFilter中判断请求的URL是否包含Swagger UI的路径来过滤掉与Swagger UI相关的请求。
以下是代码示例:
```java
public class SwaggerFilter extends OncePerRequestFilter {
private static final String SWAGGER_UI_PATH = "/swagger-ui.html";
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
String path = request.getRequestURI();
if (!StringUtils.contains(path, SWAGGER_UI_PATH)) {
filterChain.doFilter(request, response);
}
}
}
```
SpringSecurity 5.7中如何设置OncePerRequestFilter过滤器对特定路径不生效
在Spring Security 5.7中,可以通过配置WebSecurity来排除特定路径不受OncePerRequestFilter过滤器的过滤。具体步骤如下:
1. 创建一个继承自OncePerRequestFilter的过滤器类。
```java
public class CustomFilter extends OncePerRequestFilter {
// 这里是过滤器的具体实现
}
```
2. 在WebSecurityConfigurerAdapter子类中配置WebSecurity。
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 这里是其他的HttpSecurity配置
.addFilterBefore(new CustomFilter(), UsernamePasswordAuthenticationFilter.class)
.authorizeRequests()
.antMatchers("/exclude/path/**").permitAll()
.anyRequest().authenticated();
}
}
```
在上面的代码中,通过addFilterBefore方法将CustomFilter添加到UsernamePasswordAuthenticationFilter之前,然后使用antMatchers方法指定不需要被过滤的路径,这些路径将会被放行,其他路径则需要进行身份认证。