• 【电商项目实战】拦截器(详细篇)


    🍁博客主页:👉@不会压弯的小飞侠
    欢迎关注:👉点赞👍收藏留言
    系列专栏:👉SpringBoot电商项目实战
    学习社区: 👉不会压弯的小飞侠
    知足上进,不负野心。
    🔥欢迎大佬指正,一起学习!一起加油!

    在这里插入图片描述


    🍁 拦截器

    • 在Spring MVC中拦截请求是通过处理器拦截器HandlerInterceptor来实现的,它拦截的目标是请求的地址。在Spring MVC中定义一个拦截器,需要实现HandlerInterceptor接口。
    • 拦截器:首先将所有的请求统一拦截到拦截器中,可以拦截器中来定义过滤的规则,如果不满足系统的设置的过滤规则,统一的处理是重新去打开login.html页面(重定向和转发),推荐使用重定向。
    • 在SpringBoot项目中拦截器的定义和使用。SpringBoot是依靠springMVC来完成的。SpringMVC提供了一个HandlerInterceptor接口,用于表示定义一个拦截器。受限制自定义个类,在这个类实现这个接口
    • 1.首先自定义一个类,在这个类实现这个Handlerlnterceptor接口。
    • 2.注册过滤器:
    • 添加白名单
      • 可以在不登录的情况下访问
      • login.html\register.html\login\register\index.html\product.html
    • 添加黑名单
      • 在用户登录的状态才可以访问的页面资源。
    • 3.注册过滤器的技术:借助WebMvcConfigure接口,可以将用户定义的拦截器进行注册,才可以保证拦截器能够生效和使用。定义一个类,然后让这个类实现WebMvcConfigure接口。配置信息,建议存放在项目的config包结构下。|

    🔥 HandlerInterceptor

    • preHandle()方法
      • 该方法将在请求处理之前被调用。
    • postHandle()方法
    • 该方法将在当前请求进行处理之后,也就是Controller方法调用之后执行,但是它会在DispatcherServlet进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller处理之后的ModelAndView对象进行操作。
    • afterCompletion()方法
    • 该方法将在整个当前请求结束之后,也就是在DispatcherServlet渲染了对应的视图之后执行。

    🔥WebMvcConfigurer

    • WebMvcConfigurer接口中的核心方法之一addInterceptors(InterceptorRegistry registry)方法表示添加拦截器。主要用于进行用户登录状态的拦截,日志的拦截等。
      • addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例
      • addPathPatterns:用于设置拦截器的过滤路径规则;addPathPatterns("/**")对所有请求都拦截
      • excludePathPatterns:用于设置不需要拦截的过滤规则

    🔥 在项目中添加拦截器功能

    • 分析:项目中很多操作都是需要先登录才可以执行的,所以应使用拦截器解决该问题。
    • 创建拦截器类com.jkj.interceptor.LoginInterceptor,并实现HandlerInterceptor接口。
    /** 定义处理器拦截器 */
    public class LoginInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            if (request.getSession().getAttribute("uid") == null) {
                response.sendRedirect("/web/login.html");
                return false;
            }
            return true;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 创建LoginInterceptorConfigurer拦截器的配置类并实现WebMvcConfigurer接口,配置类需要添加@Configruation注解修饰。
    /** 注册处理器拦截器 */
    @Configuration
    public class LoginInterceptorConfigurer implements WebMvcConfigurer {
        /** 拦截器配置 */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // 创建拦截器对象
            HandlerInterceptor interceptor = new LoginInterceptor();
    
            // 白名单
            List<String> patterns = new ArrayList<String>();
            patterns.add("/bootstrap3/**");
            patterns.add("/css/**");
            patterns.add("/images/**");
            patterns.add("/js/**");
            patterns.add("/web/register.html");
            patterns.add("/web/login.html");
            patterns.add("/web/index.html");
            patterns.add("/web/product.html");
            patterns.add("/users/register");
            patterns.add("/users/login");
            patterns.add("/districts/**");
            patterns.add("/products/**");
    
            // 通过注册工具添加拦截器
            registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns(patterns);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    🔥测试

    • 启动项目:
    • 在浏览器输入:localhost:8080/web/product.html
    • 测试结果:直接放行,不进行拦截

    在这里插入图片描述


    学习视频:

    【SpringBoot项目实战完整版】SpringBoot+MyBatis+MySQL电脑商城项目实战-哔哩哔哩】
    https://b23.tv/qGh9x9L

    在这里插入图片描述

  • 相关阅读:
    什么是冲突域,什么是广播域?区别又是什么
    java Python+Django的个人博客系统
    STM32CubeMX驱动INA226芯片
    springboot+redis水果超市商城系统(源码+sql+论文报告)
    计算机毕业设计Java柚子树数字化精准管理系统(源码+系统+mysql数据库+Lw文档)
    python视频帧转图像
    企业级低代码开发效率变革赋能业务增长
    22矩阵——向量范数和矩阵范数 : 矩阵范数与向量范数的相容、Numpy计算范数
    全志A40i PRREMPT-RT Linux平台搭建IgH环境
    IT运维:利用数据分析平台采集Windows event log数据
  • 原文地址:https://blog.csdn.net/qq_43514330/article/details/126317629