开启 Http Basic
现在的实例中,访问 Eureka Server 是不需要用户名、密码的,不需要安全验证。为了防止微服务暴露,可以开启 Http Basic 安全教研。
Eureka Server 开启 Http Basic
引入 pom 依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
创建配置文件
server:
port: 8761
spring:
security:
user:
name: laiyy # 访问 Eureka Server 的用户名
password: 123456 # 访问 Eureka Server 的密码
eureka:
client:
service-url:
defaultZone: http://localhost:${server.port:8761}/eureka/
register-with-eureka: false
fetch-registry: false
访问 http://localhost:8761
Eureka Client 开启 Http Basic
引入 pom 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置文件
spring:
application:
name: spring-cloud-eureka-client-http-basic
eureka:
client:
security:
basic:
user: laiyy
password: 123456
service-url:
defaultZone: http://${eureka.client.security.basic.user}:${eureka.client.security.basic.password}@localhost:8761/eureka
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${server.port}
server:
port: 8081
需要注意,defaultZone 需要设置为: http://user:password@ip:port/eureka/
启动 Eureka Client,验证 Http Basic
在启动 Client 后,观察日志,可以看到出现了 403 错误:
[图片上传失败...(image-6ca959-1551662462133)]
明明已经指定了 Eureka Server 的用户名、密码、ip、端口,为什么还是注册失败?
是因为 Http Basic 默认是同源的,而 client、server 的 ip、端口不一致,会出现跨域访问请求,导致 403.
解决办法:在 Eureka Server 端关闭 csrf 访问。
@EnableWebSecurity
public class HttpBasicConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.csrf().disable();
}
}
重新启动 Server、Client,访问 Server,可以看到 Client 注册成功