springboot实现过滤器和拦截器代码
时间: 2024-10-14 09:13:28 浏览: 10
在Spring Boot中,过滤器(Filter)和拦截器(Interceptor)都可以用于对HTTP请求进行预处理或后处理,但它们的使用场景和应用方式有所不同。
**过滤器(Filter)**:
过滤器主要用于在Web层处理特定的请求,如添加或修改请求头、处理预请求逻辑等。在Spring Boot中,你需要在`WebMvcConfigurerAdapter`或自定义的`WebMvcConfigurer`接口中配置filter。例如:
```java
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.core.Ordered;
public class MyFilterConfig implements WebMvcConfigurer {
@Override
public void addFilters(FilterRegistrationBean<?> filters) {
FilterRegistrationBean<MyFilter> filter = new FilterRegistrationBean<>();
filter.setFilter(new MyFilter());
// 设置过滤器顺序(数字越小优先级越高)
filter.setOrder(Ordered.HIGHEST_PRECEDENCE);
filters.addFilter(filter);
}
}
```
在这里,`MyFilter`是你需要自定义的过滤器类。
**拦截器(Interceptor)**:
拦截器则更适合于处理业务逻辑层面的操作,如权限验证、日志记录等。在Spring MVC中,你可以通过`@ControllerAdvice`注解创建全局拦截器,或者在每个控制器上单独声明。例如:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
@RestController
public class MyGlobalInterceptor {
private final MyBusinessLogic logic;
@Autowired
public MyGlobalInterceptor(MyBusinessLogic logic) {
this.logic = logic;
}
@Around("execution(* com.example.controller.*.*(..))") // 匹配所有控制器方法
public Object around(HandlerMethod handlerMethod) throws Exception {
// 先进行预处理操作...
Object result = handlerMethod.proceed(); // 调用实际方法
// 后处理操作...
return result;
}
}
// 或者在单个控制器上使用
@RestController
public class MySpecificInterceptorController {
@ModelAttribute("myInterceptor")
public MySpecificInterceptor interceptor() {
return new MySpecificInterceptor();
}
// 每个方法都会经过这个拦截器
@PostMapping("/someEndpoint")
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<String> handleRequest(@ModelAttribute("myInterceptor") MySpecificInterceptor interceptor) {
// ...
}
}
```
这里,`MyBusinessLogic`和`MySpecificInterceptor`是你的业务逻辑类。
阅读全文