为 Eureka Server添加用户认证

本文介绍如何为EurekaServer配置安全认证,包括添加spring-boot-starter-security依赖、配置用户名密码、关闭csrf保护以及重启服务。通过这些步骤,可以实现EurekaServer的安全登录,并确保微服务注册时的身份验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本信息:
springboot:2.1.0.RELEASE
springcloud:Greenwich.RELEASE

之前搭建的Eureka Server是允许匿名访问的,为了进一步加强安全设置,今天会对的Eureka Server进行改造,使其需要登录后才能访问。

第一步:在pom文件中添加spring-boot-starter-security依赖

<dependency>
   	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

第二步:在application.properties文件中添加以下配置:

spring.security.user.name=user
spring.security.user.password=password123

第三步:重启Eureka Server服务http://localhost:1111/login
在这里插入图片描述
此处输入配置文件中的 name 和 password 即可。

第四步:将微服务注册到需要认证的Eureka Server上
只需要修改Eureka客户端配置文件eureka.client.serviceUrl.defaultZone=http://user:password123@localhost:1111/eureka/

第五步:重启Eureka客户端。

然而出现下面的错误信息:

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
	at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9.2.jar:1.9.2]
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.2.jar:1.9.2]
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.9.2.jar:1.9.2]
	at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.2.jar:1.9.2]
	at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.2.jar:1.9.2]
	at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829) ~[eureka-client-1.9.2.jar:1.9.2]
	at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121) [eureka-client-1.9.2.jar:1.9.2]
	at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101) [eureka-client-1.9.2.jar:1.9.2]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_201]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_201]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_201]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_201]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_201]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_201]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]

2019-08-05 16:57:21.749  WARN 18648 --- [nfoReplicator-0] c.n.discovery.InstanceInfoReplicator     : There was a problem with the instance info replicator

怎么办呢?开始寻找解决办法:因为新版本的security默认开启csrf了,关掉就好了,Eureka Server新建一个配置类

@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(); // 开启认证
	}
}

再次重启Eureka Server和Eureka客户端,客户端注册成功。
在这里插入图片描述

<think>好的,我现在需要解决用户的问题:如何部署Eureka集群并添加安全认证用户提到想了解Eureka集群的部署教程,以及使用Spring Cloud Security进行身份验证和授权。我需要结合用户提供的引用内容来构建答案。 首先,我需要回忆一下Eureka集群的基本部署方法。根据引用[4],Eureka集群部署需要多个Eureka Server实例相互注册,确保高可用性。每个实例需要配置其他实例的地址作为服务端节点。例如,在配置文件中设置不同的端口和相互注册的URL。同时,服务提供者和消费者需要连接到所有Eureka节点,以便在其中一个节点不可用时仍能正常工作。 接下来是安全认证部分。引用[2]提到了在Config Server添加Spring Security依赖,进行安全认证。同样的方法应该适用于Eureka Server用户需要添加spring-boot-starter-security依赖,然后在配置文件中设置用户名和密码。引用[1]提到Spring Cloud Security的功能,如单点登录和令牌管理,但在这里可能只需要基本的HTTP基本认证。 现在需要将这两个部分结合起来。部署Eureka集群时,每个实例不仅要注册到其他实例,还需要启用安全认证。这意味着每个Eureka Server的配置文件中需要包含安全相关的配置,如安全用户名和密码,并且在服务的注册地址中包含这些凭证。 可能遇到的问题包括:配置格式是否正确,如URL中的用户名密码是否正确编码;依赖是否正确添加;以及集群节点之间是否能够互相认证。例如,在配置其他Eureka节点的URL时,需要使用http://user:password@hostname:port/eureka/的格式,确保认证信息被正确传递。 另外,服务提供者和消费者在注册到Eureka集群时,也需要在配置文件中提供认证信息,否则无法通过安全验证。这需要在这些客户端的配置中添加对应的用户名和密码。 最后,启动顺序可能需要确保所有Eureka节点同时运行,或者至少有一个节点先启动,然后其他节点依次启动并注册。测试时可以通过访问各个Eureka的仪表盘,查看节点是否相互识别,并且服务是否正确注册。 总结步骤应该是:配置每个Eureka实例的application.yml,设置端口、安全认证、集群节点地址;添加Spring Security依赖;修改客户端配置以包含认证信息;启动集群并验证。</think>### 部署Eureka集群并添加Spring Cloud Security安全认证 #### 一、Eureka集群部署步骤 1. **创建多个Eureka Server实例** 每个实例需配置不同的端口,并相互注册。例如: ```yaml # application-peer1.yml server: port: 8761 eureka: client: service-url: defaultZone: http://user:password@peer2:8762/eureka/,http://user:password@peer3:8763/eureka/ spring: application: name: eureka-server ``` ```yaml # application-peer2.yml server: port: 8762 eureka: client: service-url: defaultZone: http://user:password@peer1:8761/eureka/,http://user:password@peer3:8763/eureka/ ``` 2. **服务提供者/消费者配置** 客户端需连接所有Eureka节点: ```yaml eureka: client: service-url: defaultZone: http://user:password@peer1:8761/eureka/,http://user:password@peer2:8762/eureka/ ``` 3. **启动集群** 使用不同配置文件启动多个实例,例如: ```bash java -jar eureka-server.jar --spring.profiles.active=peer1 java -jar eureka-server.jar --spring.profiles.active=peer2 ``` #### 二、添加Spring Cloud Security安全认证 1. **添加依赖** 在Eureka Server项目的`pom.xml`中添加: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 2. **配置安全规则** 在`application.yml`中设置用户名密码: ```yaml spring: security: user: name: user password: password ``` 3. **允许Eureka端点访问** 创建安全配置类: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/eureka/**").permitAll() .anyRequest().authenticated() .and().httpBasic(); } } ``` 4. **更新服务注册地址** 客户端和其他Eureka节点需在URL中包含认证信息: ```yaml defaultZone: http://user:password@peer1:8761/eureka/ ``` #### 三、验证部署 1. 访问`http://peer1:8761`,输入用户名密码后查看Eureka仪表盘,确认其他节点已注册[^4]。 2. 启动服务提供者,观察其是否成功注册到所有Eureka节点[^3]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值