过滤器(Filter)
过滤器是一种可以动态地拦截、处理和响应HTTP请求和响应的对象。它基于Servlet规范,可以拦截所有到达Web应用的请求,包括静态资源(如HTML、CSS、JavaScript文件等)和动态资源(如Servlet、JSP页面等)。过滤器主要用于请求的预处理和响应的后处理,如字符编码处理、URL访问记录等。
定义过滤器: 实现javax.servlet.Filter接口,并重写doFilter方法。
注册过滤器: 通过@WebFilter注解自动注册,或者使用FilterRegistrationBean在Spring配置类中注册。
// 跨域过滤器
@Component
public class CORSFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//*号表示对所有请求都允许跨域访问
HttpServletResponse res = (HttpServletResponse) response;
res.addHeader("Access-Control-Allow-Credentials", "true");
res.addHeader("Access-Control-Allow-Origin", "*");
res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) {
response.getWriter().println("Success");
return;
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
上面代码定义了一个跨域资源共享(CORS)过滤器,用于处理跨域请求。
拦截器(Interceptor)
拦截器是Spring MVC框架中的一部分,它基于Spring框架的AOP(面向切面编程)思想。它主要拦截Controller层的方法调用,不会拦截对静态资源的请求。拦截器主要用于在请求处理的不同阶段(如请求进入控制器方法之前或之后)执行额外的逻辑操作,如权限检查、接口日志记录、异常处理等。
定义拦截器: 实现HandlerInterceptor接口,并重写preHandle方法。
注册拦截器: 在Spring配置类中注册拦截器,并指定拦截的路径和顺序。
java
import com.sxgis.forestywzt.common.web.interceptor.PlusWebInvokeTimeInterceptor;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 通用配置
*
* @author Lion Li
*/
@AutoConfiguration
public class ResourcesConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 全局访问性能拦截
registry.addInterceptor(new PlusWebInvokeTimeInterceptor());
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
}
}
上面代码为ruiyi-plus中定义web的调用时间统计的拦截器,用于记录在请求进入控制器方法到结束所用时间。
作用范围
- 过滤器拦截所有到达Web应用的请求(包括静态资源和动态资源)
- 拦截器主要拦截Controller层的方法调用,不拦截静态资源
操作对象
- 过滤器只能对请求(request)和响应(response)进行操作
- 拦截器可以对请求(request)、响应(response)、处理器(handler)、模型视图(modelAndView)、异常(exception)等进行操作
评论区