首页 > 编程语言 >java过滤器(Filter)、Spring拦截器(Handler)

java过滤器(Filter)、Spring拦截器(Handler)

时间:2022-08-15 17:56:51浏览次数:93  
标签:容器 拦截器 java Spring void Filter println Override public

首先,tomcat容器中有Servlet容器和Spring容器,java过滤器。

  • Filter 是在 Servlet 规范中定义的,是 Servlet 容器支持的;Handler是在 Spring 容器内的,是 Spring 框架支持的
  • 方法的执行时机不一样:Filter是在Handler前执行的
  • 不同的实现
@Component
public class MyFilter implements Filter {
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

        System.out.println("Filter 前置");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        System.out.println("Filter 处理中");
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

        System.out.println("Filter 后置");
    }
}

Handler

@Component
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        System.out.println("Interceptor 前置");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

        System.out.println("Interceptor 处理中");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

        System.out.println("Interceptor 后置");
    }
}

接着将自定义好的拦截器处理类进行注册,并通过addPathPatternsexcludePathPatterns等属性设置需要拦截或需要排除的URL

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
        registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**");
    }
}

参考文章:

servlet容器,web容器,spring容器,springmvc容器的区别_万米高空的博客-CSDN博客_servlet springmvc区别

拦截器和过滤器的区别 - SegmentFault 思否



标签:容器,拦截器,java,Spring,void,Filter,println,Override,public
From: https://www.cnblogs.com/tiancai/p/16589145.html

相关文章

  • 监控项目指标-SpringBoot Actuator
    一、初识引入环境<!--引入监控功能--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-star......
  • 三更 SpringSecurity笔记
    SpringSecurity从入门到精通课程介绍0.简介​SpringSecurity是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源......
  • 《JavaStudy36》多态
     ......
  • Java中的锁
    一、乐观锁和悲观锁悲观锁一个共享数据加了悲观锁,那线程每次想操作这个数据前都会假设其他线程可能也会操作这个数据,所以每次操作前都会上锁,这样其他线程想操作这个数据......
  • 【java面试题】final
    【java面试题】final final的作用final的含义是最终的修饰类:表示类不可被继承修饰方法:表示方法不可被子类重写,但是可以重载修饰变量:表示变量一旦被赋值就不......
  • java学习路线整理
    java从入门到放弃:就业学习路线Java基础HTML、CSSJavaScriptmysqlJavaWebssmMyBatisSpringSpringMVCVueSpringBootSpringClouddocker......
  • 清晰梳理最全日志框架关系与日志配置-SpringBoot 2.7.2 实战基础
    优雅哥SpringBoot2.7.2实战基础-07-日志配置Java中日志相关的jar包非常多,log4j、log4j2、commons-logging、logback、slf4j等,本文首先梳理这些包之间关系,然后......
  • 取两个List<Object>的差集数据和交集数据 java
    List<ProjectSimpleInfoVO>projectSimpleInfoVOList=newArrayList<>();ProjectSimpleInfoVOprojectSimpleInfoVO=newProjectSimpleInfoVO();pr......
  • java.lang.IllegalStateException: getWriter() has already been called for this re
    异常出现原因是response在获取字节流之前会判断字符流是否已使用,反之获取字符流之前也会判断字节流是否已使用,若判断已使用则抛出异常getWriter()/getOutStream()hasalre......
  • JavaScript Promise
    异步编程同步(synchronous):同步按照代码顺序执行。异步(asynchronous):异步不按照代码顺序执行。JS异步操作函数往往通过回调函数来实现异步任务的结果处理。回调函数......