springboot如何正确配置拦截器,放行某些请求
时间: 2024-03-10 09:50:02 浏览: 125
在Spring Boot中,可以通过实现`HandlerInterceptor`接口来自定义拦截器。在配置拦截器时,需要在WebMvcConfigurer中添加拦截器。以下是一个简单的示例:
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/**") //拦截所有请求
.excludePathPatterns("/login"); //放行/login请求
}
}
```
在上述示例中,我们通过实现`WebMvcConfigurer`接口,并在`addInterceptors`方法中添加拦截器。通过调用`registry.addInterceptor`方法来添加拦截器,并通过`addPathPatterns`方法来设置需要拦截的请求路径,通过`excludePathPatterns`方法来设置需要放行的请求路径。
在`HandlerInterceptor`接口中,有三个方法可以重写,分别是:
- `preHandle`:在请求处理之前进行调用(Controller方法调用之前)。
- `postHandle`:请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)。
- `afterCompletion`:在整个请求完成之后,视图渲染完成之后进行调用,主要用于资源清理。
以下是一个简单的示例:
```java
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前进行调用
return true; // 返回true表示继续执行请求,返回false表示中断请求
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 请求处理之后进行调用,但是在视图被渲染之前
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在整个请求完成之后,视图渲染完成之后进行调用
}
}
```
在实际使用中,可以根据具体需求重写上述方法,并在拦截器中编写需要实现的业务逻辑。
阅读全文