Eureka -- Http Basic(5) 开启 Http Basic

开启 Http Basic

现在的实例中,访问 Eureka Server 是不需要用户名、密码的,不需要安全验证。为了防止微服务暴露,可以开启 Http Basic 安全教研。

Eureka Server 开启 Http Basic

源码:https://gitee.com/laiyy0728/spring-cloud/tree/master/spring-cloud-eureka/spring-cloud-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

源码:https://gitee.com/laiyy0728/spring-cloud/tree/master/spring-cloud-eureka/spring-cloud-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 注册成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章