SpringBoot中的拦截器 interceptor

简介: SpringBoot中的拦截器 interceptor
  1. 定义拦截器类
public class MyInterceptor extends HandlerInterceptorAdapter {
    public MyInterceptor(){
        System.out.println("MyInterceptor contructor...........");
    }
    //在执行目标方法之前
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("MyInterceptor preHandle");
            return true;
    }
    //在执行目标方法之后,在目标方法return 返回响应视图之前
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor postHandle");
    }
    //在目标方法return 返回响应视图之后
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("MyInterceptor afterCompletion");
    }
}


  1. config/ConfigRegistCenter
/**
 * 配置中心
 * 拦截器、视图解析器的配置等 web
 */
@EnableWebMvc  //启用Spring MVC支持
@Configuration //允许在上下文中注册额外的bean或导入其他配置类
public class ConfigRegistCenter implements WebMvcConfigurer {
    //注册拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
                                                     .excludePathPatterns("/login")
                                                    .excludePathPatterns("/regist"); 
    }
}
http://localhost:8080/demo/login
http://localhost:8080/demo/regist


登录检查拦截器

要求:我的xx(收藏,订单,个人中心,简历....)需要用户登录过后才能观察看的
controller: /myorder/18392839
            /resume/
        /job/
             /member/getcode
            /member/login
            /member/regist
 前端:    /myorder/info.jsp
    /myorder/all.jsp
    /member/login.jsp
    /member/regist.jsp
    /resume.jsp
静态资源:
    /static/css
        /js
        /images
        /dist
        /layui
      registry.addInterceptor(new LoginInterceptor())
            .addPathPatterns("/**")
            .excludePathPatterns("/member/getcode", "/member/login",
                       "/member/regist", "/job/**","/company"
                                 "/css/**",                                                                 "/js/**","/images/**","/layui/**","/dist/**");
public class LoginInterceptor implements HandlerInterceptor {
    //检查登录业务拦截器,执行(controller)login方法之前就需要拦截检验的,所以需要把拦截的业务写在preHandle方法中
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Member member = (Member)session.getAttribute("loginUser");
        if(member ==null){
            System.out.println("用户尚未登录,请先登录");
           // request.getRequestDispatcher("/member/login.jsp").forward(request, response);
             response.sendRedirect(request.getContextPath()+"/member/login.jsp");
            return  false;
        }
        else{
            System.out.println("用户已经登录,放行");
            return true;
        }
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}

将自定义的拦截器注册到 中心去

/**
 * WebConfigurer 需要实现WebMvcConfigurer接口,并实现里面的连个方法
 * (老版本的spring-boot中使用的是WebMvcConfigurerAdapter,新版本中已经过时,
 *  还有不能通过继承WebMvcConfigurationSupport这个类实现,这样会在某些情况下失效) *
 */
@Configuration //允许在上下文中注册额外的bean或导入其他配置类
public class WebConfigurer implements WebMvcConfigurer {
    //这个方法用于注册拦截器,我们自己定义的拦截器需要通过在这里添加注册后才能生效
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //addPathPatterns 用来设置拦截路径
        //excludePathPatterns 用来设置白名单,也就是不需要触发这个拦截器的路径。
        //addPathPatterns("/**") 表示拦截所有的请求
        //.excludePathPatterns("/login","/regist")表示出了登录与注册之外,都会拦截(因为登录注册不需要登录页可以访问)
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/member/getcode", "/member/login",
                                     "/member/regist","/css/**",
                                     "/js/**","/images/**","/layui/**","/dist/**");
    }
    //这个方法是用来配置静态资源的,比如html,js,css等
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    }
}
目录
相关文章
|
监控 Java Apache
Spring Boot拦截器(Interceptor)详解
Spring Boot拦截器(Interceptor)详解
560 0
Spring Boot拦截器(Interceptor)详解
Java:SpringBoot集成filter过滤器、interceptor拦截器
Java:SpringBoot集成filter过滤器、interceptor拦截器
170 0
Java:SpringBoot集成filter过滤器、interceptor拦截器
|
安全 Java Maven
SpringBoot之拦截器Interceptor使用姿势介绍
在SpringMVC中,拦截器与Filter两者的应用场景好像差不多,最大的区别可能是前者属于Spring的特产,而后者则是Servlert三剑客中的一个,它们本质的区别在于两者发生的时机不一致
208 0
SpringBoot之拦截器Interceptor使用姿势介绍
|
SQL XML Java
【SpringBoot + Mybatis系列】插件机制 Interceptor| 8月更文挑战
本文将主要介绍一下自定义 Interceptor 的使用姿势,并给出一个通过自定义插件来输出执行 sql,与耗时的 case
184 0
【SpringBoot + Mybatis系列】插件机制 Interceptor| 8月更文挑战
|
XML 架构师 前端开发
SpringBoot从小白到精通(十)使用Interceptor拦截器,一学就会!
使用Spring Boot开发web项目有个非常重要的组件:拦截器。以前我们在做mvc 项目时也使用到的是filter过滤器也就是拦截器。其实Spring Boot 中的拦截器和SpringMVC中的拦截器也是类似的,只是配置上有些区别。那么下面我们就来看看Spring Boot 是怎么配置拦截器的。
SpringBoot从小白到精通(十)使用Interceptor拦截器,一学就会!
|
Java Spring
Java:SpringBoot集成filter过滤器、interceptor拦截器
Java:SpringBoot集成filter过滤器、interceptor拦截器
191 0
Java:SpringBoot集成filter过滤器、interceptor拦截器
|
前端开发 Java Spring
Spring Boot 2.X(九):Spring MVC - 拦截器(Interceptor)
拦截器 1.简介 Spring MVC 中的拦截器(Interceptor)类似与 Servlet 开发中的过滤器 Filter,它主要用于拦截用户请求并作相应的处理,它也是 AOP 编程思想的体现,底层通过动态代理模式完成。
1453 0
|
Web App开发 NoSQL Java
SpringBoot 拦截器(Interceptor)的使用
拦截器intercprot  和 过滤器 Filter 其实作用类似 在最开始接触java 使用struts2的时候,里面都是filter 后来springmvc时就用interceptor 没太在意过区别,反正就是起检查...
1774 0
|
Java 容器 Spring
springboot的interceptor(拦截器)的应用
一、SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。在web开发中,拦截器是经常用到的功能。它可以帮我们验证是否登陆、预先设置数据以及统计方法的执行效率等等。
1801 0