SpringBoot3这些变化一定要记住了

开发 前端
在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中,如下3.2.1 访问/env返回结果:

图片图片

图片图片

所有值都加密处理了。

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

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

自定义加密处理功能

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

图片图片

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来满足其需求。

责任编辑:武晓燕 来源: Spring全家桶实战案例源码
相关推荐

2024-05-10 08:10:05

Spring虚拟线程JDK

2021-09-14 11:26:22

微服务架构模式

2023-09-26 07:43:22

工具骨架屏页面

2020-08-19 10:11:36

SQLMySQL数据库

2020-12-03 10:17:25

Kubernetes架构微服务

2014-10-29 14:52:13

程序员

2018-09-04 15:10:40

2023-08-07 14:28:07

SpringBoot工具

2021-03-15 12:00:19

Kubernetes微服务架构

2018-02-25 04:57:01

物联网网络技术v

2020-10-19 07:50:32

Linux命令系统

2018-10-26 14:32:46

2017-06-07 09:13:13

云存储云服务公有云

2017-10-12 16:28:33

奥哲H3BPM

2023-08-09 08:29:51

SpringWeb编程

2021-05-12 11:10:11

HTTPSLinux服务器

2018-08-15 13:25:18

Java开源工具

2024-02-19 09:02:00

Rust编码

2010-11-19 16:02:42

IT族

2020-09-08 14:05:06

Redis数据库缓存
点赞
收藏

51CTO技术栈公众号