SpringBoot拦截器的使用
目录
- 一、拦截器简介
- 二、拦截器配置使用方式
- 1、过滤器拦截器作用范围
- 2、拦截器的使用
- 三、知识点总结
- 1、拦截器的使用
- 2、拦截器和过滤器的相同与不同
一、拦截器简介 【SpringBoot拦截器的使用】拦截器通常通过动态代理的方式来执行。
拦截器的生命周期由
IoC
容器管理,可以通过注入等方式来获取其他Bean
的实例,使用更方便。二、拦截器配置使用方式
1、过滤器拦截器作用范围
文章图片
2、拦截器的使用
示例代码如下:
package com.rongrong.wiki.interceptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /*** 拦截器:Spring框架特有的,常用于登录校验,权限校验,请求日志打印 /login*/ @Component public class LogInterceptor implements HandlerInterceptor {private static final Logger LOG = LoggerFactory.getLogger(LogInterceptor.class); @Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 打印请求信息LOG.info("------------- LogInterceptor 开始 -------------"); LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod()); LOG.info("远程地址: {}", request.getRemoteAddr()); long startTime = System.currentTimeMillis(); request.setAttribute("requestStartTime", startTime); return true; }@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {long startTime = (Long) request.getAttribute("requestStartTime"); LOG.info("------------- LogInterceptor 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime); } }
将拦截器加入到配置中,示例代码如下:
package com.rongrong.wiki.config; import com.rongrong.wiki.interceptor.LogInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import javax.annotation.Resource; @Configurationpublic class SpringMvcConfig implements WebMvcConfigurer {@ResourceLogInterceptor loginInterceptor; public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login"); }}
重新编译启动,查看结果如下:
文章图片
三、知识点总结
1、拦截器的使用
- 返回
true
会往后执行 - 返回
false
会结束,可以利用这点来做权限拦截 addPathPatterns()
,要拦截请求excludePathPatterns()
,排除请求,不拦截
2、拦截器和过滤器的相同与不同
- 都可以用来统一处理请求,比如:打印日志、权限控制
- 过滤器依赖于
servlet
容器,拦截器依赖Spring
框架 - 过滤器不用注入其它类,拦截器可注入其它类,基于这一点,建议能用拦截器的都用拦截器
SpringBoot
拦截器的使用的文章就介绍到这了,更多相关SpringBoot
拦截器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!推荐阅读
- SpringBoot|SpringBoot 进行限流的操作方法
- Java中常用的设计模式之装饰器模式详解
- 机器学习算法系列(十八)-随机森林算法(Random Forest Algorithm)
- Spring|Spring JPA的实体属性类型转换器并反序列化工具类详解
- 雪花算法(分布式唯一ID生成利器)
- Linux服务器配置ulimit的常用参数介绍
- Enigma|Enigma Sim-英格玛密码机模拟器
- LibOpenCM3(三)|LibOpenCM3(三) .ld文件(连接器脚本)和startup代码说明
- 服务器|阿里云服务器搭建个人网站
- 程序员|这款开源测试神器,圆了我玩游戏不用动手的梦想