背景:
初入 Spring Cloud,为了安全着想设置密码认证登录,结果导致了client无法注册成功!
报错:com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
解决办法:
旧版本:
security:
basic:
enabled: true
但是已经被弃用 了!
新版本:
第一步:
新版本的security默认开启csrf了,需要关掉
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
http.csrf().disable();//关掉csrf
//注意:为了可以使用 http://${user}:${password}@${host}:${port}/eureka/ 这种方式登录,所以必须是httpBasic,如果是form方式,不能使用url格式登录
http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
}
第二步:
一开始我以为这样就可以了,结果再次报错
还有一步,就是在 Eureka 和client 的yml 中
第一个admin是用户名,第二个是密码,在 Eureka 和client 的yml 中 都必须配置!
然后就可以运行成功了!