Spring Boot 2.x가 출시된 지 오래되었고 이제 Spring Cloud도 Spring Boot 2.x를 기반으로 한 Finchley 버전을 출시했습니다. 이제 프로젝트의 전반적인 프레임워크 업그레이드를 진행해 보겠습니다.
업그레이드 전 => 업그레이드 후
Spring Boot 1.5.x => Spring Boot 2.0.2
Spring Cloud Edgware 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 클라이언트를 업그레이드해야 하며, 기타 종속 항목은 변경되지 않았습니다.
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 Security일반 등록 센터 및 구성 센터는 보안 암호화를 사용하며
spring-boot-starter-security
구성 요소를 사용합니다. 업그레이드 두 가지 질문이 있습니다.
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()
이 종료되어 이전 기본 인증 방식으로 돌아갔습니다. 🎜🎜🎜🎜🎜이제 다음 명령을 사용하여 다시 암호화하고 해독할 수 있습니다. 🎜🎜기본 인증을 복원한 후에는 구성 센터에 암호화된 연결이 필요했던 이전 서비스가 다시 정상적으로 실행될 수 있습니다. 🎜🎜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 중국어 웹사이트의 기타 관련 기사를 참조하세요!