Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署

这篇具有很好参考价值的文章主要介绍了Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习视频:【编程不良人】2021年SpringBoot最新最全教程

第十三章、拦截器

Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署,Spring Boot,spring boot,学习,jar

  1. 拦截器 :Interceptor 拦截 中断

    类似于javaweb中的Filter,不过没有Filter那么强大

  2. 作用

    Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦截器可以在请求到达控制器之前和之后执行一些操作,例如日志记录、权限验证、数据处理等。

  3. 拦截器特点

    1. 请求到达会经过拦截器,响应回来同样会经过拦截器
    2. 拦截器只能Controller的请求,不能拦截jsp、静态资源相关请求
    3. 拦截器可以中断请求轨迹

拦截器实现

  • 开发步骤
  1. 配置拦截器 实现**HandlerInterceptor**,这个类通常包含**preHandlepostHandleafterCompletion**三个方法,分别用于请求处理之前、之后以及完成后执行自定义逻辑。

    @Component
    public class MyInterceptor implements HandlerInterceptor {
        private final Logger log = LoggerFactory.getLogger(MyInterceptor.class);
    
        @Override
        //参数1:当前请求对象  参数2:当前请求响应对象 参数3:当前请求的控制器对应的方法对象
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            log.debug("======1========");
            return HandlerInterceptor.super.preHandle(request, response, handler);
        }
    
        @Override
        // 参数1、2、3同上 参数4:当前控制器方法的返回值
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            log.debug("======2========");
            log.debug("view:{}",modelAndView.getViewName());
            HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
        }
    
        @Override
        // 参数1、2、3同上 参数4:请求过程中出现异常时的异常对象
        // 这个方法总是会执行 无论请求正确或出现异常
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            log.debug("======3========");
            HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
        }
    }
    
  2. 创建配置类,目的是将拦截器注册到程序中,在这个配置类中,你需要重写**addInterceptors方法,并在其中将拦截器添加到InterceptorRegistry**中。

    @Configuration
    public class MvcConfig implements WebMvcConfigurer {
        @Autowired
        private MyInterceptor myInterceptor;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(myInterceptor)// 指定拦截器
                    .addPathPatterns("/**")// 拦截所有
                    .excludePathPatterns("file/**");//排除拦截
    
        }
    }
    
  • 注意

    多个拦截器注册到配置类中,他们的执行顺序是按照栈一样的顺序,第一个拦截器先执行,那么该拦截器也是最后退出的。秉承先进后出的原理

    @Configuration
    public class MvcConfig implements WebMvcConfigurer {
        @Autowired
        private MyInterceptor myInterceptor;
    
        @Autowired
        private MyInterceptor2 myInterceptor2;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(myInterceptor)// 指定拦截器
                    .addPathPatterns("/**")// 拦截所有
                    .excludePathPatterns("file/**");//排除拦截
            registry.addInterceptor(myInterceptor2)// 指定拦截器
                    .addPathPatterns("/**")// 拦截所有
                    .excludePathPatterns("file/**");//排除拦截
        }
    }
    
    • 执行结果

      Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署,Spring Boot,spring boot,学习,jar

  • 可以通过order参数修改执行顺序

    @Configuration
    public class MvcConfig implements WebMvcConfigurer {
        @Autowired
        private MyInterceptor myInterceptor;
    
        @Autowired
        private MyInterceptor2 myInterceptor2;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(myInterceptor)// 指定拦截器
                    .addPathPatterns("/**")// 拦截所有
                    .excludePathPatterns("file/**") //排除拦截
                    .order(2);
            registry.addInterceptor(myInterceptor2)// 指定拦截器
                    .addPathPatterns("/**")// 拦截所有
                    .excludePathPatterns("file/**")//排除拦截
                    .order(1);
        }
    }
    

第十四章、项目部署

Spring Boot 项目可以通过多种方式部署:

  1. 传统服务器部署:将 Spring Boot 项目打包成可执行的War/ JAR 文件,然后将该 War/JAR 文件上传到服务器并运行。这种方式需要确保服务器上已经安装了 Java 运行环境。
  2. Docker 容器部署:将 Spring Boot 项目打包成 Docker 镜像,然后在 Docker 容器中运行该镜像。这种方式可以实现环境的快速部署和一致性。
  3. 云平台部署:将 Spring Boot 项目部署到云平台,比如 Heroku、Google Cloud Platform (GCP)、Amazon Web Services (AWS) 等。这些云平台提供了简单的部署流程和弹性的扩展能力。
  4. 自动化部署工具:使用自动化部署工具,比如 Jenkins、GitLab CI/CD 等,实现持续集成和持续部署。这种方式可以自动化构建、测试和部署 Spring Boot 项目。

目前讲的就是传统部署方式,分为两种:

  • war部署(linux系统)
    1. 安装jdk
    2. 安装tomcat
    3. 安装数据库
    4. 部署项目war放到tomcat weapps
  • jar部署(linux系统)
    1. 安装jdk
    2. 安装数据库
    3. 运行项目java-jar项目.jar

war包部署

  1. 目前创建springboot项目默认都是jar包部署,需要修改设置pom.xml

    <packaging>war</packaging>
    
  2. 删除内嵌tomcat依赖

     <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <!--设置仅当前idea环境可以,不参与打包-->
        <scope>provided</scope>
    </dependency>
    <!--tomcat 不参与打包-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    
  3. 配置入口类,不再使用内嵌服务器

    <configuration>
        <fork>true</fork>
        <!--增加jvm参数-->
        <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
        <!--指定入口类-->
        <mainClass>com.baizhi.Springboot06Application</mainClass>
        <skip>true</skip>
    </configuration>
    
    // SpringBootServletInitializer:不在使用内嵌容器启动,使用外部tomact启动
    @SpringBootApplication
    public class Springboot06Application extends SpringBootServletInitializer {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(Springboot06Application.class);
        }
    
  4. 在maven里进行打包操作

    Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署,Spring Boot,spring boot,学习,jar

  5. 打包后以后

    Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署,Spring Boot,spring boot,学习,jar

  6. 在tomcat运行war包项目

    1. 将WAR文件复制到webapps目录

    2. 启动Tomcat服务器

      # 进入Tomcat的bin目录
      cd $CATALINA_HOME/bin
      # 启动Tomcat服务器
      ./startup.sh
      
    3. 访问应用程序:http://localhost:8080/springboot06

jar包部署【推荐】

  1. 执行在maven执行**package**进行打包

  2. 通过控制台打开jar包目录

    Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署,Spring Boot,spring boot,学习,jar

  3. 启动jar包

    **java -jar jar文件名 nohub &** 解释:nohub:后台启动 &:不要日志

  4. 成功启动

    Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署,Spring Boot,spring boot,学习,jar

  • 注意:打包jsp模板时,pom.xml里面必须使用1.4.2插件(plugin)
  • 下一章:Spring Boot学习随笔- 第一个Thymeleaf应用(基础语法th:,request、session作用域取值)文章来源地址https://www.toymoban.com/news/detail-786302.html

到了这里,关于Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 3自定义注解+拦截器+Redis实现高并发接口限流

    在当今互联网应用开发中,高并发访问是一个常见的挑战。为了保障系统的稳定性和可靠性,我们需要对接口进行限流,防止因过多的请求导致系统崩溃。 本文将介绍如何利用Spring Boot 3中的自定义注解、拦截器和Redis实现高并发接口限流,帮助程序员解决这一挑战。 1. 自定

    2024年04月28日
    浏览(49)
  • spring boot3token拦截器链的设计与实现

      ⛰️个人主页:     蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 写在前面 流程分析 需要清楚的 实现步骤 1.定义拦截器 2.创建拦截器链配置类 3.配置拦截器链顺序 4.配置拦截排除项 最后 本文介绍了spring boot后端服务开发中有关如何设计

    2024年03月11日
    浏览(46)
  • 【Spring Boot系列】- Spring Boot拦截器

    拦截器(Interceptor)是在面向切面编程中应用的,就是在service或者一个方法前调用一个方法,或者在方法后调用一个方法。是基于JAVA的反射机制。可以根据 URL 对请求进行拦截,主要应用于登陆校验、权限验证、乱码解决、性能监控和异常处理等功能。 在 Spring Boot 项目中,

    2024年02月13日
    浏览(39)
  • spring boot 拦截器例子

    在Spring Boot中,拦截器是通过实现`HandlerInterceptor`接口来实现的。它允许你在请求到达控制器方法之前和之后执行自定义的逻辑。下面我将为你提供一个简单的Spring Boot拦截器的例子。 假设我们有一个简单的控制器类`UserController`,其中有两个请求处理方法:`getUser`和`saveUser`,

    2024年02月15日
    浏览(39)
  • Spring Boot 统一功能处理(拦截器实现用户登录权限的统一校验、统一异常返回、统一数据格式返回)

    目录 1. 用户登录权限校验 1.1 最初用户登录权限效验 1.2 Spring AOP 用户统⼀登录验证 1.3 Spring 拦截器 (1)创建自定义拦截器 (2)将自定义拦截器添加到系统配置中,并设置拦截的规则 1.4 练习:登录拦截器 (1)实现 UserController 实体类 (2)返回的登录页面:login.html (3)实

    2024年02月12日
    浏览(50)
  • Spring Boot拦截器(Interceptor)详解

    **拦截器(Interceptor)**同 Filter 过滤器一样,它俩都是面向切面编程——AOP 的具体实现(AOP切面编程只是一种编程思想而已)。 你可以使用 Interceptor 来执行某些任务,例如在 Controller 处理请求之前编写日志,添加或更新配置…… 在 Spring 中,当请求发送到 Controller 时,在被 Contr

    2024年02月03日
    浏览(41)
  • Spring Boot统一处理功能——拦截器

    ⽤户登录权限的发展从之前每个⽅法中⾃⼰验证⽤户登录权限,到现在统⼀的⽤户登录验证处理,它是⼀个逐渐完善和逐渐优化的过程。 我们先来回顾⼀下最初⽤户登录验证的实现⽅法: 从上述代码可以看出,每个⽅法中都有相同的⽤户登录验证权限,它的缺点是: 1. 每个

    2024年02月13日
    浏览(35)
  • 【Spring Boot】拦截器与统一功能处理

    博主简介:想进大厂的打工人 博主主页: @xyk: 所属专栏: JavaEE进阶   上一篇文章我们讲解了Spring AOP是一个基于面向切面编程的框架,用于将某方面具体问题集中处理,通过代理对象来进行传递,但使用原生Spring AOP实现统一的拦截是非常繁琐的。而在本节,我们将使用一种

    2024年02月14日
    浏览(39)
  • Spring Boot拦截器与动态代理深度剖析

    🎉欢迎来到架构设计专栏~Spring Boot拦截器与动态代理深度剖析 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果

    2024年01月22日
    浏览(51)
  • Spring Boot拦截器与过滤器的区别

    在使用Spring Boot开发Web应用程序时,您可能需要在处理请求之前或之后执行某些操作。这些操作可以包括身份验证、日志记录、性能监测等。在这种情况下,您可以使用两种不同的机制:拦截器和过滤器。本文将介绍这两种机制及其区别,并提供一些示例代码来演示如何在S

    2024年02月08日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包