美文网首页springboot程序员SpringFramework
spring-boot 使用HandlerInterceptor

spring-boot 使用HandlerInterceptor

作者: 八目朱勇铭 | 来源:发表于2017-09-29 21:00 被阅读354次

    拦截器的使用步骤:
    1、编写一个拦截器,实现HandlerInterceptor接口
    2、编写一个类,继承WebMvcConfigurerAdapter抽象类,将其放入Spring容器中,然后重写addInterceptors()方法,并调用给的参数InterceptorRegistry.addInterceptor()把自己编写的那个拦截器作为参数加进去。

    直接贴代码:

    pom.xml加入如下依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    编写一个拦截器,实现HandlerInterceptor接口

    public class MyHandlerInterceptor implements HandlerInterceptor {
    
        //在Controller执行之前调用,如果返回false,controller不执行
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("---------preHandle--------");
            return true;
        }
    
        //controller执行之后,且页面渲染之前调用
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("---------postHandle--------");
        }
    
        //页面渲染之后调用,一般用于资源清理操作
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("---------afterCompletion--------");
        }
    }
    

    HandlerInterceptor接口几个抽象方法讲解:
    preHandler:在Controller执行之前调用
    postHandler:controller执行之后,且页面渲染之前调用
    afterCompletion:页面渲染之后调用,一般用于资源清理操作

    编写一个类,继承WebMvcConfigurerAdapter抽象类,将其放入Spring容器中,然后重写addInterceptors()方法,并调用给的参数InterceptorRegistry.addInterceptor()把自己编写的那个拦截器作为参数加进去。

    //@Component也可以
    @SpringBootConfiguration
    public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new MyHandlerInterceptor());
        }
    }
    

    编写一个Controller接受请求

    @RestController
    public class WebController {
        @GetMapping("/login")
        public String login() {
            System.out.println("-----login------");
            return "login";
        }
    }
    

    springboot启动类

    @SpringBootApplication
    public class BlogApplication {
        public static void main(String[] args) {
            SpringApplication.run(BlogApplication.class, args);
        }
    }
    

    浏览器访问:http://localhost:8080/login

    控制台结果

    console result

    ok,以上就是spring-boot 使用HandlerInterceptor拦截器的全部内容。有兴趣的读者可以持续关注笔者的springboot系列文章。

    相关文章

      网友评论

        本文标题:spring-boot 使用HandlerInterceptor

        本文链接:https://www.haomeiwen.com/subject/djviextx.html