服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringBoot3这些变化一定要记住了

SpringBoot3这些变化一定要记住了

2024-03-04 14:36Spring全家桶实战案例源码 Java教程

在AuthenticationManagerResolver存在时,ReactiveUserDetailsService不再自动配置。如果应用程序依赖于ReactiveUserDetailService,尽管存在AuthenticationManagerResolver,请定义自己的ReactiveUserDetailsService bean来满足其需求。​

环境:SpringBoot.3.0.5

1.Spring MVC 和 WebFlux URL 匹配更改

从 Spring Framework 6.0 开始,尾部斜杠匹配配置选项已被弃用,其默认值设置为false。如下示例:

// 在Spring6之前匹配下面两个路径
// 1. /some/greeting
// 2. /some/greeting/
@GetMapping("/some/greeting")
public String greeting() {
  return "Hello";
}
// 在spring6之后版本中只能匹配/some/greeting这一个路径

你可以通过如下方式支持尾部斜杠

@GetMapping("/some/greeting", "/some/greeting/")

// spring mvc
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
  @Override
  public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.setUseTrailingSlashMatch(true) ;
  }
}
// webflux
@Configuration
public class WebConfiguration implements WebFluxConfigurer {
  @Override
  public void configurePathMatching(PathMatchConfigurer configurer) {
    configurer.setUseTrailingSlashMatch(true) ;
  }
}

2. Http Header大小配置

在Spring6之前版本,server.max-http-header-size在四个支持的嵌入式web服务器上的处理不一致。当使用Jetty、Netty或Undertow时,它会配置最大HTTP请求头大小。当使用Tomcat时,它会配置最大HTTP请求和响应头大小。

为了解决这种不一致,server.max-http-header-size已被弃用,并引入了server.max-http-request-header-size的替代品。这两个属性现在只适用于请求header大小,而与底层的web服务器无关。

# Spring6之前版本
server:
  max-http-header-size: 8KB
# Spring6之后版本  
server:
  max-http-request-header-size: 8KB

要限制Tomcat或Jetty(仅有的两个服务器支持这样的设置)上HTTP响应头的最大大小,请使用WebServerFactoryCustomizer。

public class WebConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {


  @Override
  public void customize(TomcatServletWebServerFactory factory) {
    // ...
  }
}

Jetty

Jetty还不支持Servlet 6.0。要在Spring Boot 3.0中使用Jetty,必须将Servlet API降级到5.0。您可以使用jakarta-servlet。属性来执行此操作。

3. RestTemplate 中的 Apache HttpClient

Spring6已删除对 Apache HttpClient 的支持,并替换为org.apache.httpcomponents.client5:httpclient5(注意:此依赖项具有不同的 groupId)。如果您注意到 HTTP 客户端行为存在问题,则可能是RestTemplate回退到 JDK 客户端。org.apache.httpcomponents:httpclient可以由其他依赖项传递传递,因此您的应用程序可能依赖此依赖项而不声明它。

4. Actuator Endpoints清理

因为/env和/configprops端点可以包含敏感值,所以默认情况下所有值总是被屏蔽。这曾经只适用于敏感的键。

SpringBoot3之前版本,如下2.7.16 访问/env返回结果:

SpringBoot3这些变化一定要记住了图片

只对敏感信息加密处理。

SpringBoot3中,如下3.2.1 访问/env返回结果:

SpringBoot3这些变化一定要记住了图片

SpringBoot3这些变化一定要记住了图片

所有值都加密处理了。

你可以通过如下配置进行显示

management:
  endpoint:
    env:
      show-values: always
    configprops:
      show-values: always

自定义加密处理功能

@Configuration
public class ActuatorConfig {
  @Bean
  SanitizingFunction sanitizingFunction() {
    return data -> {
      return data.withValue("------") ;
    };
  }
}

SpringBoot3这些变化一定要记住了图片

5. 配置更改

Cassandra属性

Cassandra的配置属性已经从spring.data.cassandra改变为spring.cassandra .

Redis属性

Redis的配置属性已经从spring.redis改变为spring.data.redis。因为redis自动配置要求Spring数据存在于classpath中。

MySQL JDBC驱动

MySQL JDBC驱动程序的坐标已经从mysql:mysql-connector-java更改为com.mysql:mysql-connector-j。如果你使用的是MySQL JDBC驱动,升级到Spring Boot 3.0时要相应地更新它的坐标。

Spring Security 改变

Spring Boot 3.0已升级到Spring Security 6.0。

ReactiveUserDetailsService

在AuthenticationManagerResolver存在时,ReactiveUserDetailsService不再自动配置。如果应用程序依赖于ReactiveUserDetailService,尽管存在AuthenticationManagerResolver,请定义自己的ReactiveUserDetailsService bean来满足其需求。

原文地址:https://mp.weixin.qq.com/s/6gO_S9SnzuU0Nru3Qi7GmQ

延伸 · 阅读

精彩推荐
  • Java教程Guava Cache的使用简介

    Guava Cache的使用简介

    这篇文章主要介绍了Guava Cache的使用简介,帮助大家更好的理解和学习使用Guava Cache,感兴趣的朋友可以了解下...

    江湖段小二7122021-08-30
  • Java教程Java使用httpRequest+Jsoup爬取红蓝球号码

    Java使用httpRequest+Jsoup爬取红蓝球号码

    本文将结合实例代码,介绍Java使用httpRequest+Jsoup爬取红蓝球号码,需要的朋友们下面随着小编来一起学习学习吧...

    一路发12192021-09-24
  • Java教程Spring Security UserDetails实现原理详解

    Spring Security UserDetails实现原理详解

    这篇文章主要介绍了Spring Security UserDetails实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可...

    码农小胖哥2382020-09-08
  • Java教程零基础如何快速学习Java编程?

    零基础如何快速学习Java编程?

    零基础如何快速学习Java编程?入行Java开发要有一定的逻辑思维能力,而逻辑思维能力不是天生的但可以通过锻炼得到提升。学习一门IT技术,想要学好最主...

    博学谷4742021-03-23
  • Java教程Netty学习教程之基础使用篇

    Netty学习教程之基础使用篇

    Netty是由JBOSS提供的一个Java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。...

    荒野的尘埃4222020-10-21
  • Java教程java中的static{}块的实例详解

    java中的static{}块的实例详解

    这篇文章主要介绍了java中的static{}块的实例详解的相关资料,这里提供实例来帮助大家理解该如何使用static块,需要的朋友可以参考下...

    babyduncan3512020-12-19
  • Java教程基于Java实现扫码登录的示例代码

    基于Java实现扫码登录的示例代码

    相信大家对二维码都不陌生,生活中到处充斥着扫码登录的场景,如登录网页版微信、支付宝等。本文将利用Java实现一个简易版扫码登录的 Demo,需要的可...

    John同学11022022-11-29
  • Java教程Java 时间格式化原来这么多玩法

    Java 时间格式化原来这么多玩法

    时间过得真是快,现在已经是2022年了。作为开发来说,时间处理是非常繁琐的。从Java 8开始有了新的时间API、时间的处理更加优雅,不再需要借助三方类库...

    码农小胖哥8012022-01-07