添加security认证之后,死活注册不上去
问题描述:
Eureka Client 无法在Server 端注册,报failure with status code 403; retrying on another server if available
控制台报错以下信息
配置
eureka server服务端 application.yml
配置
server:
port: 8010
spring:
application:
name: eureka-server
# 添加security账号认证,访问eureka时需要账户密码才能访问
security:
basic:
enabled: true
user:
name: yexindong
password: 123456
eureka:
#指定主机名称
instance:
hostname: 127.0.0.1
#server一定程度上也是client,互为client,
client:
#由于自己就是服务器,不需要注册到自己
register-with-eureka: false
#由于自己就是服务器,不需要从服务器获取注册信息
fetch-registry: false
#服务地址
service-url:
defaultZone: http://192.168.2.108:8010/eureka/
eureka client 客户端 application.yml
配置
server:
port: 8005
spring:
application:
name: service-user
eureka:
client:
service-url:
##注册中心服务器地址,yexindong:123456是sucrity认证的账户和密码
defaultZone: http://yexindong:123456@127.0.0.1:8010/eureka/
第一种解法
检查url是否正确,标点符号是否有问题,冒号要使用英文的,不要用中文的
第二种解法
在地址里加上用户名密码,然后运行还是报错,是因为新版本的security默认开启csrf了,关掉就好了,新建一个配置类,看下面:添加以下配置即可解决
package com.web.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable(); //关闭csrf
http.authorizeRequests().anyRequest().authenticated().and().httpBasic(); //开启认证
}
}
注意:WebSecurityConfig
一定要放在eureka server 端、一定要放在eureka server端、一定要放在eureka server 端
第二种解法是可行的, 有些人发现加上了第二种解法之后没解决问题,是因为这个 WebSecurityConfig
配置类要加在eureka服务端才有效果,你放在eureka client 端是无效的;