spring cloud Finchley.SR2 版本
配置文件
bootstrap.yml文件
spring:
application:
name: eureka
security:
user:
name: admin
password: admin
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/
fetch-registry: true
register-with-eureka: false
添加依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
启动并访问http://localhost:8761 ,可以看到登录界面, 说明用户密码已经生效了
客户端配置文件
bootstrap.yml文件
eureka:
instance:
#是否使用IP定义注册中心的地址
prefer-ip-address: true
status-page-url-path: /swagger-ui.html
client:
service-url:
defaultZone: http://admin:admin@localhost:8761/eureka/
接着启动服务注册到注册中心,此时发现启动时抛出异常:Cannot execute request on any known server
原因是因为新版本的security默认开启了csrf拦截, 所以需要禁用csrf功能. 在启动类中加入以下代码:
@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(); //开启认证
}
}
问题解决!!