网站首页> 后端开发> Java> SpringBoot配置拦截器的示例

SpringBoot配置拦截器的示例

时间:2020-11-08 09:59:02 阅读:6047次 来源:互联网

在SpringBoot中配置拦截器,主要有下面两个步骤:

1、继承接口 HandlerInterceptor,根据需要重写其中的三个类。

2、在配置类中注入该类。

public class MyInterceptor implements HandlerInterceptor {

  //controller执行之前
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    System.out.println("preHandler......");
    return true;
  }

  //执行完controller执行之后、视图渲染前调用,可以在该方法里获取或者修改model
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    System.out.println("postHandler......");
  }

  //一般用于清理资源
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    System.out.println("afterCompletion......");
  }
}
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    //1、全部拦截
//    registry.addInterceptor(myInterceptor()).addPathPatterns("/**");
    //2、拦截指定路径
    registry.addInterceptor(myInterceptor()).addPathPatterns("/hello");
  }

  @Bean
  MyInterceptor myInterceptor(){
    return new MyInterceptor();
  }

}

写个controller测试一下

@RestController
public class HelloController {

  @RequestMapping("/hello")
  public String hello(){
    System.out.println("hello");
    return "hello";
  }

  @RequestMapping("/world")
  public String world(){
    System.out.println("world");
    return "world";
  }
}

测试结果:

preHandler......
hello
postHandler......
afterCompletion......
world

SpringBoot中还有一终拦截器,WebRequestInterceptor

public class MyWebRequestInterceptor implements WebRequestInterceptor {
  @Override
  public void preHandle(WebRequest webRequest) throws Exception {

  }

  @Override
  public void postHandle(WebRequest webRequest, ModelMap modelMap) throws Exception {

  }

  @Override
  public void afterCompletion(WebRequest webRequest, Exception e) throws Exception {

  }
}

和HandlerInterceptor比较相似,但是可以发现,该拦截器的preHandler返回值为空,说明该方法并不影响后面方法的执行。那么这个拦截器存在的目的是什么呐?

点进WebRequest:

public interface WebRequest extends RequestAttributes {
  @Nullable
  String getHeader(String var1);

  @Nullable
  String[] getHeaderValues(String var1);

  Iterator<String> getHeaderNames();

  @Nullable
  String getParameter(String var1);

  @Nullable
  String[] getParameterValues(String var1);

  Iterator<String> getParameterNames();

  Map<String, String[]> getParameterMap();

  Locale getLocale();

  String getContextPath();

  @Nullable
  String getRemoteUser();

  @Nullable
  Principal getUserPrincipal();

  boolean isUserInRole(String var1);

  boolean isSecure();

发现对reques请求中参数做了进一步处理(@Nullable表示可以为空),更加的方便调用。所以两个拦截器的侧重点不同,HandlerInterceptor功能较为强大,可以拦截请求,可以实现WebRequestInterceptor的所有功能,只是要写的逻辑代码要多一点。更而WebRequestInterceptor倾向于简化获取request参数的过程以及预设参数供后面的流程使用。

以上就是SpringBoot配置拦截器的示例的详细内容。

本文地址:https://www.manongw.com/article/205.html

文章来源:转载于博客园,转载网址为https://www.cnblogs.com/phdeblog/p/13261288.html

版权申明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 ezhongheng@126.com 举报,一经查实,本站将立刻删除。

相关文章
  • 本文主要介绍了IDEA创建Servlet并配置web.xml的实现的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-10-23 10:52
  • 本文主要介绍了Java Servlet请求重定向的方法的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-10 16:09
  • 本文主要介绍了史上最通俗理解的Java死锁代码演示的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-10-19 22:27
  • 本文主要介绍了Spring如何基于aop实现操作日志功能的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-10 10:29
  • 本文主要介绍了Java Servlet 运行原理分析的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-10 16:31
  • 本文主要介绍了springboot整合dubbo设置全局唯一ID进行日志追踪的示例代码的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-10-26 18:52
  • 本文主要介绍了Kafka单节点伪分布式集群搭建实现过程详解的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-12 12:08
  • 本文主要介绍了关于Java8中map()和flatMap()的一些事的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-10-25 16:12
  • 本文主要介绍了Spring Cloud Alibaba 之 Nacos教程详解的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-06 19:59
  • 本文主要介绍了基于springboot实现文件上传的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...
    2020-11-09 09:24