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

第十三章、拦截器

  1. 拦截器 :Interceptor 拦截 中断

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

  2. 作用

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

  3. 拦截器特点

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

拦截器实现

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

    @Componentpublic 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中。

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

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

    @Configurationpublic 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参数修改执行顺序

    @Configurationpublic 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

    war
  2. 删除内嵌tomcat依赖

         org.apache.tomcat.embed    tomcat-embed-jasper        provided    org.springframework.boot    spring-boot-starter-tomcat    provided
  3. 配置入口类,不再使用内嵌服务器

        true        -Dfile.encoding=UTF-8        com.baizhi.Springboot06Application    true
    // SpringBootServletInitializer:不在使用内嵌容器启动,使用外部tomact启动@SpringBootApplicationpublic 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)

作者:扬眉剑出鞘
出处: https://www.cnblogs.com/eyewink/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。