SpringBoot SpringSecurity 如何自己拦截器中获取已经默认可以访问的请求路径给直接过滤,就是在SecurityConfig中已经配置了的。因为业务需要避开这些请求url
时间: 2024-09-26 10:14:17 浏览: 34
Spring Boot集成Spring Security,HTTP请求授权配置:包含匿名访问、允许访问、禁止访问配置
在Spring Boot集成Spring Security时,如果你想要自定义拦截器并且避免对已经在`SecurityConfig`中配置过的、可以直接访问的请求路径做额外的过滤,你可以按照以下步骤操作:
1. **理解filter链**:Spring Security的过滤器链是由`WebSecurityConfigurerAdapter`中的`configure(HttpSecurity http)`方法构建的,其中包含了预定义的安全规则。
2. **创建自定义拦截器**:创建一个新的过滤器或者全局异常处理器(GlobalFilter或ExceptionHandler),例如通过实现`WebFilter`接口。在过滤器的`doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)`方法中,检查请求URL是否在预设的白名单中。
```java
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
@Component
public class WhitelistFilter extends OncePerRequestFilter {
private static final List<String> WHITELIST_URLS = Arrays.asList("/api/login", "/api/register");
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
String path = request.getServletPath();
if (!WHITELIST_URLS.contains(path)) { // 如果不在白名单内
chain.doFilter(request, response);
}
}
}
```
3. **整合到Spring Boot应用**:将自定义过滤器添加到Spring Boot应用的`WebMvcConfigurer`或`WebFluxConfigurer`中,以便它能够覆盖已有的安全过滤器。
```java
@Configuration
public class MyConfiguration implements WebMvcConfigurer {
@Autowired
private WhitelistFilter whitelistFilter;
public void addCustomFilters(Ordered ordered) {
// 注册过滤器,并指定其优先级以保证在默认Spring Security过滤器之前执行
beans.addLast(ordered, "whitelistFilter", whitelistFilter);
}
}
```
4. **配置启动顺序**:确保在Spring Security自动配置之前注册你的自定义过滤器,以保证它们能覆盖默认的行为。
```java
@SpringBootApplication
public class AppApplication {
public static void main(String[] args) {
SpringApplication.run(AppApplication.class, args).runAfterStartup(() -> {
new MyConfiguration().addCustomFilters(new Ordered(0)); // 0表示尽可能早地执行
});
}
}
```
阅读全文