首页 > 其他分享 >Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署

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

时间:2023-12-21 19:57:19浏览次数:34  
标签:拦截器 部署 Spring jar war 拦截 public

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

第十三章、拦截器

  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/**");//排除拦截
        }
    }
    
    • 执行结果

  • 可以通过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项目默认都是war包部署,需要修改设置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里进行打包操作

  5. 打包后以后

  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包目录

  3. 启动jar包

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

  4. 成功启动

  • 注意:打包jsp模板时,pom.xml里面必须使用1.4.2插件(plugin)

标签:拦截器,部署,Spring,jar,war,拦截,public
From: https://www.cnblogs.com/eyewink/p/17919971.html

相关文章

  • Spring mvc中前后端数据交互的方式
    现在IT行业ssm框架用的还是挺多的,今天给大家分享一下springmvc中前后的数据交互的方式:后端➡前端在SpringMVC中这主要通过Model将数据从后端传送到前端,一般的写法为:@RequestMapping(value="/index",method=RequestMethod.POST)publicStringindex(Modelmodel){String......
  • 搭建springcloud注册中心eureka以及admin监控
    现在springcloud微服务是当下盛行的主流框架,我们可以通过eureka实现服务监控和预警。接下来是项目搭建的主要步骤一、搭建eureka-server注册中心注意点有三个,分别是1.pom导入依赖(下面是完整的pom文件):springboot、eureka-server、springcloud<?xmlversion="1.0"encoding="UTF-......
  • 如何新建SpringBoot2.7.X项目
    新版的idea在创建SpringBoot项目时最低的JDK都需要选择jdk17,可是我的本地只有jdk8,通过创建maven工程,然后在pom中手动填写相关依赖等信息来创建项目,pom文件内容(官网copy的)<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-......
  • SpringBoot原理
    配置SpringBoot中支持三种格式的配置文件.properties.yml.yaml虽然Springboot支持多种文件配置,但是通常在项目开发中,我们一般推荐使用yml文件配置优先级在SpringBoot项目中,常见的属性配置有5种,3种配置文件加上两种外部的配置,生效优先级SrpingBoot配置优先级(低->高):1......
  • Spring Retry使用小结
    目录1、背景2、使用步骤2.1、pom.xml中引入相关依赖2.2、启用@Retryable2.3、在响应方法上加上注解1、背景日常开发中经常会下发接口回调通知失败、远程调用失败等等,这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重......
  • Zabbix6.0下部署开源的Zabbix报表系统ZbxTable
    Zabbix6.0下部署ZbxTable(开源的Zabbix报表系统)一、ZbxTable简单介绍ZbxTable是使用Go语言开发的一个开源的Zabbix报表系统目前已经推出ZbxTable2.1版本主要功能如下:按照主机类型,展示或导出主机资源资产管理,资源状态总览多用户、角色、用户组配置告警进行精确分发、屏蔽......
  • 部署安装Wazuh
    关于Wazhu可以通过2种方式部署安装 第一种方法为:下载镜像将镜像导入VM虚拟机里(需要电脑里有VM虚拟机软件)https://documentation.wazuh.com/current/deployment-options/virtual-machine/virtual-machine.html打开链接下载wazhu镜像 该版本为4.7.1如果想要切换版本则点......
  • 河南南阳医专部署接口
    ///w##class(PISService.API.DHCPISReport).GetReportInfoByAdmNoToEMR("145111")///Desc:2023-02-10yangshun标板提供的获取病历报告的方法///Debug:w##class(DHCEPRFS.BL.HISInfo.BLPISInfo).GetPISPDFPath("145111")ClassMethodGetPISPDFPath(AEpisodeI......
  • Spring Validation使用小结
    目录1、背景2、常用注解2.1、BeanValidation2.0注解2.1.1、校验空值2.1.2、校验大小2.1.3、校验布尔值2.1.4、校验日期和时间2.1.5、正则表达式2.1.5.1、验证IP地址2.1.5.1、验证手机号码3、使用3.1、当方法入参为@PathVariable、@RequestParam注解的简单参数时,需要在Cont......
  • Spring框架的事务管理
    引言事务管理是企业应用程序中不可或缺的一个方面,它确保数据的一致性和完整性。Spring框架提供了一个灵活的事务管理抽象,它可以透明地工作在不同的事务管理API之上。事务管理的基本概念在深入Spring的事务管理之前,让我们回顾几个关键概念:事务(Transaction):一系列的动作,它们被视为一个......