玩转 SpringBoot 2 快速整合拦截器
2020-12-13 16:41
标签:拦截器 and index ram 示例 registry 路径 ceo 其他 首先声明一下,这里所说的拦截器是 SpringMVC 的拦截器 HandlerInterceptor。使用SpringMVC 拦截器需要做如下操作: 因为在SpringBoot 中没有 xml 文件,所以SpringBoot 为我们提供 Java Config 的方式来配置拦截器。配置方式有2种: 接下来开始 SpringBoot 整合拦截器操作详细介绍! 第一步:声明拦截器类 通过实现 HandlerInterceptor 来完成。具体代码如下: 第二步:实现 HandlerInterceptor 3 个拦截方法 实际开发中 preHandle使用频率比较高,postHandle 和 afterCompletion操作相对比较少。 在下面的代码中 preHandle 方法中定义拦截所有访问项目 URL并进行日志信息记录。postHandle 中在视图解析前进行拦截,通过 Model 在次添加数据Request域中。 afterCompletion 暂时没有想到使用场景,如果有使用过的场景可以在下面评论区中进行评论。 拦截器详细代码如下: 第三步:Java Config 的方式来配置拦截器 继承 WebMvcConfigurerAdapter 方式 通过继承 WebMvcConfigurerAdapter并重写 addInterceptors方法,通过其参数 InterceptorRegistry将拦截器注入到 Spring的上下文中。 另外拦截路径和不拦截的路径通过InterceptorRegistry 的 addPathPatterns和 excludePathPatterns方法进行设置。 这种方式官方已经不建议使用,因为官方已将 WebMvcConfigurerAdapter 标记为@Deprecated 了。 继承 WebMvcConfigurerAdapter 方式具体代码如下: 实现 WebMvcConfigurer 方式 通过实现 WebMvcConfigurer 接口并实现 addInterceptors方法,其他操作和继承 WebMvcConfigurerAdapter方式一样。具体代码如下: 编写普通Controller,具体代码如下: 在 src/main/resource 下的 templates目录下创建 IndexController访问页面 index.ftl, 代码如下: 由于我这里使用的是 Freemarker当页面使用,说以需要引入 Freemarker starter依赖,具体点如下: 通过游览器访问 localhost:8080/sbe/index,具体访问效果如下: 如上图所示在视图解析前通过 Model在次添加数据到 Request域中的msg 成功显示出来了! 日志输出信息如下:拦截地址和拦截Controller 和具体方法进行日志输出 SpringBoot 2 整合拦截器和整合 Filter的操作很像,都是通过一个注册类将其注入到Spring的上下文中,只不过Filter使用的是 FilterRegistrationBean 而 拦截器使用的是 InterceptorRegistry。 个人觉得比使用 xml 配置的方式更为简单了,如果你还没有在 SpringBoot 项目中使用过拦截器,赶快来操作一下吧! 具体代码示例请在我的GitHub 仓库 springbootexamples 中模块名为 spring-boot-2.x-interceptor 项目中进行查看 GitHub:https://github.com/zhuoqianmingyue/springbootexamples 玩转 SpringBoot 2 快速整合拦截器 标签:拦截器 and index ram 示例 registry 路径 ceo 其他 原文地址:https://www.cnblogs.com/jerry126/p/11621350.html概述
整合拦截器实战操作
public class LoginInterceptor implements HandlerInterceptor{}
public class LoginInterceptor implements HandlerInterceptor{
private Logger log = LoggerFactory.getLogger(LoginInterceptor.class);
//ControllerController逻辑执行之前
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("preHandle....");
String uri = request.getRequestURI();
log.info("uri:"+ uri);
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
log.info("拦截 Controller:"+ handlerMethod.getBean().getClass().getName());
log.info("拦截方法:"+handlerMethod.getMethod().getName());
}
return true;
}
//Controller逻辑执行完毕但是视图解析器还为进行解析之前
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
log.info("postHandle....");
Map
@Deprecated
public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {
@Configuration
public class InterceptorConfigByExtendsWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter{
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor()).addPathPatterns("/**").excludePathPatterns("/*.html");
}
}
```java
@Configuration
public class InterceptorConfigByImplWebMvcConfigurer implements WebMvcConfigurer{
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor()).addPathPatterns("/**").excludePathPatterns("/*.html");
}
}
```
测试
@Controller
public class IndexController {
@GetMapping("/index")
public String index(ModelAndView modelAndView){
return "index";
}
}
${msg}
2019-09-24 15:53:04.144 INFO 7732 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/sbe] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-09-24 15:53:04.145 INFO 7732 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2019-09-24 15:53:04.153 INFO 7732 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 8 ms
2019-09-24 15:53:04.155 INFO 7732 --- [nio-8080-exec-1] c.lijunkui.interceptor.LoginInterceptor : preHandle....
2019-09-24 15:53:04.155 INFO 7732 --- [nio-8080-exec-1] c.lijunkui.interceptor.LoginInterceptor : uri:/sbe/index
2019-09-24 15:53:04.155 INFO 7732 --- [nio-8080-exec-1] c.lijunkui.interceptor.LoginInterceptor : 拦截 Controller:cn.lijunkui.controller.IndexController
2019-09-24 15:53:04.155 INFO 7732 --- [nio-8080-exec-1] c.lijunkui.interceptor.LoginInterceptor : 拦截方法:index
2019-09-24 15:53:04.156 INFO 7732 --- [nio-8080-exec-1] c.lijunkui.interceptor.LoginInterceptor : postHandle....
2019-09-24 15:53:04.161 INFO 7732 --- [nio-8080-exec-1] c.lijunkui.interceptor.LoginInterceptor : afterCompletion....
小结
代码示例