当前位置: 首页 > news >正文

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

学习视频:【编程不良人】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 {@Autowiredprivate MyInterceptor myInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(myInterceptor)// 指定拦截器.addPathPatterns("/**")// 拦截所有.excludePathPatterns("file/**");//排除拦截}
    }
    
  • 注意

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

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

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

    @Configuration
    public class MvcConfig implements WebMvcConfigurer {@Autowiredprivate MyInterceptor myInterceptor;@Autowiredprivate MyInterceptor2 myInterceptor2;@Overridepublic 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 {@Overrideprotected 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 Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第十三章、拦截器 拦截器 &#xff1a;Interceptor 拦截 中断 类似于javaweb中的Filter&#xff0c;不过没有Filter那么强大 作用 Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦…...

Pipelined-ADC设计二——结构指标及非理想因素(Part2)

接上文&#xff0c;本章将两个比较重要的非理想因素&#xff0c;因此各项指标制定。后续会对常见的非理想因素给出常见的解决方法&#xff0c;以及设计所采用的方法。 2.2.7. 比较器失调 在流水线 ADC 中&#xff0c;比较器的主要误差来源就是比较器失调&#xff0c;称为失调误…...

Ubuntu 常用命令之 clear 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 clear命令在Ubuntu系统下用于清除终端屏幕的内容。这个命令没有任何参数&#xff0c;它的主要作用就是清理终端屏幕上的所有信息&#xff0c;使得屏幕看起来像是新打开的一样。 使用clear命令非常简单&#xff0c;只需要在终端中…...

【JAVA面试题】什么是对象锁?什么是类锁?

&#x1f34e; 个人博客 &#xff1a;个 人 主 页 &#x1f3c6;个人专栏&#xff1a;多线程JAVA ⛳️ 功 不 唐 捐 &#xff0c;玉 汝 于 成 目录 前言 回答 对象锁&#xff08;Object Lock&#xff09;&#xff1a; 类锁&#xff08;Class Lock&#xff09;&#xff1…...

飞天使-k8s知识点5-kubernetes基础名词扫盲

文章目录 deploymentspodNodeserviceskubectl 实现应用伸缩kubectl 实现滚动更新kubernetes架构 deployments 中文文档 http://docs.kubernetes.org.cn/251.htmldeployment是用来创建和更新应用的&#xff0c;master 会负责将创建好的应用实例调度到集群中的各个节点 应用实例…...

【视觉实践】使用Mediapipe进行目标检测:杯子检测和椅子检测实践

目录 1 Mediapipe 2 Solutions 3 安装mediapipe 4 实践 1 Mediapipe Mediapipe是google的一个开源项目,可以提供开源的、跨平台的常用机器学习(machine learning,ML)方案。MediaPipe是一个用于构建机器学习管道</...

C++之深拷贝进阶

目录 拷贝构造函数的深拷贝进阶版本 赋值运算符重载的深拷贝进阶 总结 上期我们学习了C中深拷贝的传统版本&#xff0c;今天我们将学习更为高效的版本。 拷贝构造函数的深拷贝进阶版本 传统版本代码如下&#xff1a; string(string& s):_str(new char[strlen(s._str)…...

导行电磁波从纵向场分量求其他方向分量的矩阵表示

导行电磁波从纵向场分量求解其他方向分量的矩阵表示 导行电磁波传播的特点 电磁波在均匀、线性、各向同性的空间中沿着 z z z轴传播&#xff0c;可用分离变量法将时间轴、 z z z轴与 x , y x,y x,y轴分离&#xff0c;电磁波的形式可表示为&#xff1a; E ⃗ E ⃗ ( x , y )…...

融资项目——swagger2的注解

1. ApiModel与ApiModelProperty(在实体类中使用) 如上图&#xff0c;ApiModel加在实体类上方&#xff0c;用于整体描述实体类。ApiModelProperty(value"xxx",example"xxx")放于每个属性上方&#xff0c;用于对属性进行描述。swagger2网页上的效果如下图&am…...

【性能优化】MySql数据库查询优化方案

阅读本文你的收获 了解系统运行效率提升的整体解决思路和方向学会MySQl中进行数据库查询优化的步骤学会看慢查询、执行计划、进行性能分析、调优 一、问题&#xff1a;如果你的系统运行很慢&#xff0c;你有什么解决方案&#xff1f; ​关于这个问题&#xff0c;我们通常首先…...

Chrome浏览器http自动跳https问题

现象&#xff1a; Chrome浏览器访问http页面时有时会自动跳转https&#xff0c;导致一些问题。比如&#xff1a; 开发阶段访问dev环境网址跳https&#xff0c;后端还是http&#xff0c;导致接口跨域。 复现&#xff1a; 先访问http网址&#xff0c;再改成https访问&#xf…...

【C++进阶02】多态

一、多态的概念及定义 1.1 多态的概念 多态简单来说就是多种形态 同一个行为&#xff0c;不同对象去完成时 会产生出不同的状态 多态分为静态多态和动态多态 静态多态指的是编译时 在程序编译期间确定了程序的行为 比如&#xff1a;函数重载 动态多态指的是运行时 在程序运行…...

PHP开发日志——循环和条件语句嵌套不同,效率不同(循环内加入条件语句,条件语句判断后加入循环,array_map函数中加入条件语句)

十多年前开发框架时&#xff0c;为了效率不断试过各种代码写法&#xff0c;今天又遇到了&#xff0c;想想php8时代会不会有所变化&#xff0c;结果其实也还是和当年一样&#xff0c;但当年没写博客&#xff0c;但现在可以把数据记录下来了。 PHP_loop_ireflies_dark_forest 项目…...

【Seata源码学习 】 扫描@GlobalTransaction注解 篇一

1. SeataAutoConfiguration 自动配置类的加载 基于SpringBoot的starter机制&#xff0c;在应用上下文启动时&#xff0c;会加载SeataAutoConfiguration自动配置类 # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfigurationio.seata.spring.boot.aut…...

DBA-MySql面试问题及答案-上

文章目录 1.什么是数据库?2.如何查看某个操作的语法?3.MySql的存储引擎有哪些?4.常用的2种存储引擎&#xff1f;6.可以针对表设置引擎吗&#xff1f;如何设置&#xff1f;6.选择合适的存储引擎&#xff1f;7.选择合适的数据类型8.char & varchar9.Mysql字符集10.如何选择…...

网络爬虫之Ajax动态数据采集

动态数据采集 规则 有时候我们在用 requests 抓取页面的时候&#xff0c;得到的结果可能和在浏览器中看到的不一样&#xff0c;在浏览器中可以看到正常显示的页面教据&#xff0c;但是使用 requests 得到的结果并没有&#xff0c;这是因为requests 获取的都是原始的 HTML 文档…...

c语言的初始学习(练习)

##初学c语言---MOOC浙江大学翁恺先生学习c语言 那么我们先看看这个题目吧&#xff0c;这是初始语法的应用。 记住&#xff0c;我们的程序是按步骤执行的&#xff0c;并不是在不同的两行同时进行。 程序设计&#xff1a;1.了解题目的需要&#xff0c;几个变量需要用到&#x…...

研究论文 2022-Oncoimmunology:AI+癌RNA-seq数据 识别细胞景观

Wang, Xin, et al. "Deep learning using bulk RNA-seq data expands cell landscape identification in tumor microenvironment." Oncoimmunology 11.1 (2022): 2043662. https://www.tandfonline.com/doi/full/10.1080/2162402X.2022.2043662 被引次数&#xff1…...

ChatGPT4与ArcGIS Pro3助力AI 地理空间分析和可视化及助力科研论文写作

在地学领域&#xff0c;ArcGIS几乎成为了每位科研工作者作图、数据分析的必备工具&#xff0c;而ArcGIS Pro3除了良好地继承了ArcMap强大的数据管理、制图、空间分析等能力&#xff0c;还具有二三维融合、大数据、矢量切片制作及发布、任务工作流、时空立方体等特色功能&#x…...

okhttp系列-一些上限值

1.正在执行的任务数量最大值是64 异步请求放入readyAsyncCalls后&#xff0c;遍历readyAsyncCalls取出任务去执行的时候&#xff0c;如果发现runningAsyncCalls的数量大于等于64&#xff0c;就不从readyAsyncCalls取出任务执行。 public final class Dispatcher {private int …...

【已验证】STM32采集声音传感器实现环境声实时监测

1. 引言声音传感器模块这玩意一般在什么环境检测类的课设毕设用的比较多&#xff0c;什么工地环境检测&#xff0c;声控灯、噪音监测、安防报警等场景。本文将详细介绍硬件连接、STM32CubeMX配置以及完整的HAL库驱动代码&#xff0c;最终通过串口打印实时噪声值&#xff08;ADC…...

用YOLOv8在树莓派上跑个‘狗脸识别’:斯坦福犬类数据集实战与轻量化部署指南

树莓派上的智能犬种识别&#xff1a;YOLOv8轻量化部署全流程实战 当你在公园遛狗时&#xff0c;有没有遇到过路人好奇询问狗狗品种的情况&#xff1f;传统的犬种识别往往依赖专业兽医或资深养犬人士的经验判断&#xff0c;而今天我们将用一块信用卡大小的树莓派&#xff0c;配合…...

如何在ComfyUI中智能合成视频序列:VHS_VideoCombine节点的专业应用方案

如何在ComfyUI中智能合成视频序列&#xff1a;VHS_VideoCombine节点的专业应用方案 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 面对AI生成的大量图像序列&…...

超滤膜行业领先公司

《2026年超滤膜权威排名&#xff1a;深圳市洛哈斯水处理技术有限公司何以凭借AI智控技术领跑行业&#xff1f;》在2026年的深度测评中&#xff0c;深圳市洛哈斯水处理技术有限公司凭借其行业领先的“AIoT智能膜系统”与卓越的长期运行稳定性&#xff0c;综合表现排名第一&#…...

长上下文与RAG

读到一篇探讨RAG技术的文章&#xff0c;很受用&#xff0c;遂记录一下。核心结论&#xff1a;RAG不会被无限上下文取代。 原文地址&#xff1a;LLM无限上下文了&#xff0c;RAG&#xff08;Retrieval Augmented Generation&#xff09;还有意义吗&#xff1f; - 今日头条 以下…...

Lingbot-Depth-Pretrain-ViTL-14在互联网内容审核中的深度场景理解应用

Lingbot-Depth-Pretrain-ViTL-14在互联网内容审核中的深度场景理解应用 每天&#xff0c;互联网上都会产生数以亿计的图片和视频。对于平台的内容审核团队来说&#xff0c;这既是流量的盛宴&#xff0c;也是巨大的挑战。传统的审核方式&#xff0c;无论是依赖人工还是基于二维…...

PySide6新手必看:从零开始用Python玩转Qt界面开发(附官方教程对比)

PySide6新手必看&#xff1a;从零开始用Python玩转Qt界面开发 在Python生态中&#xff0c;GUI开发一直是个让人又爱又恨的话题。当Tkinter显得过于简陋&#xff0c;而PyQt又面临商业授权困扰时&#xff0c;PySide6作为Qt官方推出的Python绑定&#xff0c;正成为越来越多开发者的…...

PyTorch 2.8镜像快速部署:5分钟验证torch.cuda.is_available()并启动API服务

PyTorch 2.8镜像快速部署&#xff1a;5分钟验证torch.cuda.is_available()并启动API服务 1. 镜像概述与环境准备 PyTorch 2.8深度学习镜像是一个开箱即用的高性能计算环境&#xff0c;专为现代AI工作负载优化。这个预配置环境能让你跳过繁琐的安装过程&#xff0c;直接进入模…...

告别SpeedGoat:低成本搭建Simulink Real-Time硬件在环(HIL)平台,基于PC+松下伺服实战

低成本搭建Simulink实时控制平台&#xff1a;基于PC与松下伺服的硬件在环方案 在工业自动化与运动控制领域&#xff0c;实时硬件在环&#xff08;HIL&#xff09;测试是验证算法有效性的关键环节。传统方案如SpeedGoat等专用设备虽性能稳定&#xff0c;但动辄数十万的成本让许多…...

3个步骤搞定本地OCR:让隐私保护与效率提升不再矛盾

3个步骤搞定本地OCR&#xff1a;让隐私保护与效率提升不再矛盾 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多国语言库…...