侧边栏壁纸
博主头像
小白不想白 博主等级

行动起来,活在当下

  • 累计撰写 16 篇文章
  • 累计创建 5 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

SpringBoot过滤器与拦截器

小白不想白
2025-01-03 / 0 评论 / 0 点赞 / 1 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

过滤器(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)等进行操作
0

评论区