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

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

第十三章、拦截器

  1. 拦截器 :Interceptor 拦截 中断

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

  2. 作用

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

  3. 拦截器特点

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

拦截器实现

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

    java 复制代码
    @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**中。

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

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

    java 复制代码
    @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/**");//排除拦截
        }
    }
    • 执行结果

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

    java 复制代码
    @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项目默认都是war包部署,需要修改设置pom.xml

    xml 复制代码
    <packaging>war</packaging>
  2. 删除内嵌tomcat依赖

    xml 复制代码
     <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. 配置入口类,不再使用内嵌服务器

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

  5. 打包后以后

  6. 在tomcat运行war包项目

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

    2. 启动Tomcat服务器

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

jar包部署【推荐】

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

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

  3. 启动jar包

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

  4. 成功启动

  • 注意:打包jsp模板时,pom.xml里面必须使用1.4.2插件(plugin)
相关推荐
_Kayo_3 小时前
node.js 学习笔记3 HTTP
笔记·学习
IT毕设实战小研6 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
CCCC13101636 小时前
嵌入式学习(day 28)线程
jvm·学习
一只爱撸猫的程序猿7 小时前
使用Spring AI配合MCP(Model Context Protocol)构建一个"智能代码审查助手"
spring boot·aigc·ai编程
甄超锋7 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
星星火柴9367 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头7 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
艾莉丝努力练剑8 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
武昌库里写JAVA9 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
杜子不疼.10 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习