正在練習把玩的 Spring Boot 用的是 2.5.6,剛剛升級到 3.0.2,這邊隨手記錄必須的改動
升級 Java#
換上 3.0.2 之後,Java 必須要升級到 17 以上,我原本是用 Java 11,所以 IDE 跟 Console 的 JDK 都換成了 19
升級 Gradle#
JDK 換成 19 之後跑 gradle 會遇到莫名的 PermittedSubclasses requires ASM9
我把原本的 gradle-7.2 換成 gradle-7.6 就沒事了
更換 jakarta 的 package name#
Spring Boot 3.0 Release Note 有說 Jakarta Persistence 為 3.1
Wiki 說明 Jakarta Persistence 3.0 之後把 package name 從 javax.persistence 換成 jakarta.persistence,因此要做類似的修改
1
2
3
4
5
6
7
8
| +import jakarta.persistence.Column
+import jakarta.persistence.Entity
+import jakarta.persistence.Id
+import jakarta.persistence.Table
-import javax.persistence.Column
-import javax.persistence.Entity
-import javax.persistence.Id
-import javax.persistence.Table
|
更新 Spring Security 的語法#
- authorizeRequest 已經 deprecated
- antMatchers 要換成 requestMatchers
另外有個比較雷的地方,原本我只要用 @EnableWebSecurity 就能注入 Security 相關的 Bean,更新之後要再加上 @Configuration 否則不會有效果
前後差異如下
1
2
3
4
5
6
7
8
9
10
11
12
13
| +@Configuration
@EnableWebSecurity
class AppSecurityConfig {
@Bean
fun createFilterChain(http: HttpSecurity): SecurityFilterChain {
// public
http
- .authorizeRequests()
- .antMatchers("/").permitAll()
+ .authorizeHttpRequests()
+ .requestMatchers("/").permitAll()
....
|
開發期略過 h2-console#
如果你有用 h2-console,而且在開發期想要避開 spring security,可以利用 toH2Console
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| import org.springframework.boot.autoconfigure.security.servlet.PathRequest.toH2Console
...
fun createFilterChain(http: HttpSecurity): SecurityFilterChain {
http.headers().frameOptions().sameOrigin()
http.csrf().ignoringRequestMatchers(toH2Console())
http.authorizeHttpRequests()
.requestMatchers(toH2Console())
// .requestMatchers(antMatcher("/h2-console/**")) // either this one is fine
.permitAll()
.....
return http.build()
}
|