🍁博客主页:
👉@不会压弯的小飞侠
✨欢迎关注:
👉点赞
👍收藏
⭐留言
✒
✨系列专栏:
👉SpringBoot电商项目实战
✨学习社区:
👉不会压弯的小飞侠
✨知足上进,不负野心。
🔥欢迎大佬指正,一起学习!一起加油!
目录
- 🍁 拦截器
- 🔥 HandlerInterceptor
- 🔥WebMvcConfigurer
- 🔥 在项目中添加拦截器功能
- 🔥测试
🍁 拦截器
- 在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 {@Overridepublic 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;}
}
- 创建LoginInterceptorConfigurer拦截器的配置类并实现WebMvcConfigurer接口,配置类需要添加@Configruation注解修饰。
/** 注册处理器拦截器 */
@Configuration
public class LoginInterceptorConfigurer implements WebMvcConfigurer {/** 拦截器配置 */@Overridepublic 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);}
}
🔥测试
- 启动项目:
- 在浏览器输入:
localhost:8080/web/product.html
- 测试结果:直接放行,不进行拦截
学习视频:
【SpringBoot项目实战完整版】SpringBoot+MyBatis+MySQL电脑商城项目实战-哔哩哔哩】
https://b23.tv/qGh9x9L