Spring Boot 2.x は長い間リリースされてきましたが、現在 Spring Cloud も Spring Boot 2.x に基づいた Finchley バージョンをリリースしています。次に、プロジェクトの全体的なフレームワークのアップグレードを行ってみましょう。
アップグレード前 => アップグレード後
Spring Boot 1.5.x => Spring Boot 2.0.2
Spring Cloud Edgeware SR4 => Spring Cloud Finchley.RELEASE
Eureka Serverの依存関係の更新
アップグレード前:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
アップグレード後:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
構成センターは登録センターにサービスとして登録する必要があるため、Eureka Client をアップグレードする必要があり、他の依存関係は変更されていません。
Eurekaクライアントの依存関係の更新
アップグレード前:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>
アップグレード後:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
Spring CloudがサービスクライアントIPアドレスを取得するため、登録センターのクライアントインスタンスIPが正しくありません 構成が変更されました。
アップグレード前:${spring.cloud.client.ipAddress}
${spring.cloud.client.ip-address}
spring-boot-starter-security
コンポーネントに依存します。アップグレード 質問が 2 つあります。 1. Spring Securityのパラメータが変更されているため、ユーザー名とパスワードがログインできませんspring-boot-starter-security
组件,升级后有几下两个问题。
1、用户名和密码无法登录
因为 Spring Security 的参数进行了变更。
升级前:
security: user: name: password:
升级后:
spring: security: user: name: password:
2、注册中心没有注册实例
如图所示,没有注册实例,两个注册中心无法互相注册。
因为 Spring Security 默认开启了所有 CSRF 攻击防御,需要禁用 /eureka 的防御。
在 Application 入口类增加忽略配置:
@EnableWebSecurity static class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().ignoringAntMatchers("/eureka/**"); super.configure(http); } }
3、配置中心无法加解密
升级后发现访问配置中心无法读取到配置,也无法加解密配置信息,访问配置中心链接直接跳转到了登录页面。
现在想变回之前的 basic auth 认证方式,找源码发现是自动配置跳到了登录页面,现在重写一下。
自动配置源码:
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configure(org.springframework.security.config.annotation.web.builders.HttpSecurity)
protected void configure(HttpSecurity http) throws Exception { logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity)."); http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin().and() .httpBasic(); }
重写之后:
@EnableWebSecurity static class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().ignoringAntMatchers("/**").and().authorizeRequests().anyRequest() .authenticated().and().httpBasic(); } }
其实就是把 formLogin()
。
アップグレード前:spring-boot:run -Drun.profiles=profile1
spring-boot:run -Dspring-boot.run.profiles=profile1
rrreee
3. 構成センターは暗号化または復号化できません
アップグレード後、アクセス構成センターが構成を読み取ることができず、設定情報にアクセスすると、設定センターへのリンクが直接ジャンプします。 ログイン ページにアクセスします。
ここで、以前の基本的な認証方法に戻したいと思います。ソース コードを見つけたところ、自動的に設定されてログイン ページに移動することが分かりました。
自動構成ソース コード:rrreee書き換え後: 🎜rrreee🎜 実際には、以下の図に示すように、
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configure(org.springframework.security.config.annotation.web.builders.HttpSecurity)
formLogin()
が強制終了され、以前の Basic auth 認証メソッドに戻ります。 🎜🎜🎜🎜🎜これで、次のコマンドを使用して再度暗号化と復号化を行うことができます。 🎜🎜基本認証を復元すると、構成センターへの暗号化された接続が必要だった以前のサービスが再び通常どおり実行できるようになります。 🎜🎜Maven🎜🎜 Spring Boot 2.x にアップグレードした後、Spring Boot の Maven 起動プラグインは使いにくいことがわかりました。主な理由は、プロファイルを自由に切り替えることができないためです。 🎜🎜アップグレード前: 🎜rrreee🎜 アップグレード後: 🎜rrreee🎜概要🎜🎜 上記は、すべての落とし穴を通過した後にまとめられた解決策です。実際の問題を解決するプロセスはさらに複雑です。今回のバージョン変更は少し大きく、Spring Cloud の基本的な依存関係と、登録センター (Eureka Server) と構成センター (Config Server) が正常にアップグレードされました。 🎜🎜関連する推奨事項: 🎜🎜🎜 Spring Boot の起動プロセスの関連紹介🎜🎜🎜🎜 Spring Boot の単体テストの詳細な説明🎜🎜以上がSpring Boot 2.x に基づく Finchley のバージョン分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。