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) {
    }
}
目录
相关文章
|
1月前
|
存储 JSON 算法
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
文章介绍了JWT令牌的基础教程,包括其应用场景、组成部分、生成和校验方法,并在Springboot中使用JWT技术体系完成拦截器的实现。
84 0
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
|
XML 缓存 前端开发
Spring Boot2.x-12 Spring Boot2.1.2中Filter和Interceptor 的使用
Spring Boot2.x-12 Spring Boot2.1.2中Filter和Interceptor 的使用
55 0
|
NoSQL 安全 Java
SpringBoot幂等性防重token令牌实现方案(redis+annoation+interceptor实现)
SpringBoot幂等性防重token令牌实现方案(redis+annoation+interceptor实现)
SpringBoot幂等性防重token令牌实现方案(redis+annoation+interceptor实现)
|
监控 Java Apache
Spring Boot拦截器(Interceptor)详解
Spring Boot拦截器(Interceptor)详解
622 0
Spring Boot拦截器(Interceptor)详解
Java:SpringBoot集成filter过滤器、interceptor拦截器
Java:SpringBoot集成filter过滤器、interceptor拦截器
181 0
Java:SpringBoot集成filter过滤器、interceptor拦截器
|
安全 Java Maven
SpringBoot之拦截器Interceptor使用姿势介绍
在SpringMVC中,拦截器与Filter两者的应用场景好像差不多,最大的区别可能是前者属于Spring的特产,而后者则是Servlert三剑客中的一个,它们本质的区别在于两者发生的时机不一致
238 0
SpringBoot之拦截器Interceptor使用姿势介绍
|
SQL XML Java
【SpringBoot + Mybatis系列】插件机制 Interceptor| 8月更文挑战
本文将主要介绍一下自定义 Interceptor 的使用姿势,并给出一个通过自定义插件来输出执行 sql,与耗时的 case
286 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拦截器
207 0
Java:SpringBoot集成filter过滤器、interceptor拦截器
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
158 1
下一篇
无影云桌面