• 技术文章 >Java >java教程

    springboot中过滤器和拦截器的实现方法介绍(代码)

    不言不言2018-11-20 16:01:37转载2386
    本篇文章给大家带来的内容是关于springboot中过滤器和拦截器的实现方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    过滤器和拦截器二者都是AOP编程思想的提现,都能实现诸如权限检查、日志记录等。二者有一定的相似之处,不同的地方在于:

    Spring中实现过滤器Filter

    方法1:使用springboot提供的 FilterRegistrationBean注册自定义过滤器

    public class MyFilter implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("MyFilter init...");
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            //站点图标/favicon.ico  filter会执行2次
            HttpServletRequest request=(HttpServletRequest) servletRequest;
            System.out.println(request.getRequestURI());
            System.out.println("MyFilter dofilter...");
            filterChain.doFilter(servletRequest,servletResponse);
        }
    
        @Override
        public void destroy() {
    
        }
    }

    在springboot中注册Filter

    @Configuration
    public class FilterConfig {
    
        @Bean
        public FilterRegistrationBean registrationBean(){
            FilterRegistrationBean myfilter=new FilterRegistrationBean(new MyFilter());
            myfilter.addUrlPatterns("/*");
    
            return myfilter;
        }

    到这里运行demo时会发现do filter执行了2次,debug发现这是因为浏览器请求时站点图标管理,通过uri能发现。可以根据自己的需求用正则表达式适当控制。

    方法2:servlet注解定义Filter

    @Component
    @WebFilter(filterName = "myFilter2",urlPatterns = "/*")
    public class MyFilter2 implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("myFilter2 init...");
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("myFilter2 dofilter ...");
            filterChain.doFilter(servletRequest,servletResponse);
        }
    
        @Override
        public void destroy() {
    
        }
    }

     使用servleta注解声明的filter,执行时只有一次请求。和使用spring配置filter这里不同。

    Spring中实现拦截器

    拦截器主要使用自定义类集成HandlerInterceptor。preHandle返回true时程序才会继续向下执行,返回false则中断请求。

    public class MyInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("/preHandler");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) 
    throws Exception {
            System.out.println("postHandler");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
            System.out.println("afterCompletion");
        }
    }

     在程序中配置拦截器并声明拦截规则

    @Configuration
    public class InterceptorConfig implements WebMvcConfigurer {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new MyInterceptor()).addPathPatterns("/*");
        }
    }

    运行结果

    115511-20181119200459231-479657644.png

    php入门到就业线上直播课:进入学习

    以上就是springboot中过滤器和拦截器的实现方法介绍(代码)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:博客园,如有侵犯,请联系admin@php.cn删除

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:springboot
    上一篇:Java并发编程之volatile关键字的介绍(附示例) 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• SpringBoot返回JSON日期格式出现的问题解决• springboot中配置RestTemplate的方法• springboot项目配置两个数据源的方法• SpringBoot配置redis和分布式session-redis的方法(代码)• springboot下多线程开发时需要注意的地方有哪些?(总结)• SpringBoot中集成邮件服务的详细讲解(附代码)
    1/1

    PHP中文网