Eureka添加身份认证
1.在eureka-server端添加依赖
<!--spring-boot-sercurity 用户安全校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2.application.yml文件添加配置信息
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com #eureka实例名称
client:
register-with-eureka: false #不向注册中心注册自己
fetch-registry: false #是否从eureka server获得 注册的服务信息
service-url:
defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
#身份认证信息
spring:
security:
basic:
enabled: true
user:
name: jjchiboss
password: jjchiboss
3.新建config配置java类,过滤csrf检验
/**
* EnableWebSecurity :表示开启 web 安全验证,继承 WebSecurityConfigurerAdapter ,然后覆盖默认的配置
* 将本配置类放在与启动类同级,则程序一启动就会自动执行
*/
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
/**
* ignoringAntMatchers(String... antPatterns):表示对某些请求,如果符合匹配的规则,则忽略对它们的 CSRF 防护
* /eureka/**:首斜杠表示应用上下文路径,也就是说对所有符合 http://ip:port/context-paht/eureka/** 的请求全部忽略对它们的 CSRF 防护
* 所以只要 eureka.client.serviceUrl.defaultZone 的值符合此规则,就不会被 CSRF 防护了
*/
http.csrf().ignoringAntMatchers("/eureka/**");
/**
* 还有一个一劳永逸的方式是直接禁止 CSRF 防护:
* http.csrf().disable();//完全禁止 CSRF 防护
*/
super.configure(http);
}
}
访问地址:http://user:password@server名称:端口号/eureka
默认情况下,当spring security 在类路径上时,它要求用户向应用程序发送请求时,都必须携带一个有效的csrf令牌, Eureka Client 要么就是能提供这个令牌,要么就是在 Eureka Server 直接忽略掉 Eureka Client 的请求,也就是不对这些请求进行防护。
如果不在eureka-server端进行忽略csrf处理的话,eureka-client服务将注册不进来。