1.spring cloud服务注册中心eureka server---添加Security用户认证(第四章)

为服务注册中心eureka server—添加Security用户认证

在spring-cloud-eureka服务注册中心项目的基础上增加用户认证。

1、添加依赖

		<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-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>

2、修改application.properties文件

spring.application.name=spring-cloud-eureka

server.port=8000
eureka.instance.hostname=localhost
eureka.instance.prefer-ip-address=false
#表示是否将自己注册到Eureka Server,默认为true。
eureka.client.register-with-eureka=false
#表示是否从Eureka Server获取注册信息,默认为true。
eureka.client.fetch-registry=false
#开启基于HTTP basic的认证----高版本的丢弃了这个属性默认false,查看第3段开启方法。
spring.security.basic.enabled=true
#配置登陆的账号
spring.security.user.name=user
#配置登陆的密码
spring.security.user.password=123456
#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

访问:http://localhost:8000/弹出对话框
在这里插入图片描述

如何将服务注册到Eureka上呢?只需在客户端配置文件做如下修改
eureka.client.serviceUrl.defaultZone=http://user:123456@localhost:8000/eureka/
***对于更复杂的要求,可以创建一个类型为DiscoveryClientOptionalArgs的@Bean,并向其中注入ClientFilter
3、开启基于HTTP basic的认证方法:
处理客户端无法注册到服务中心的问题 Cannot execute request on any known server 错误。

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server 
        at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:111) ~[eureka-client-1.8.6.jar:1.8.6] 
        at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.8.6.jar:1.8.6] 
        at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.8.6.jar:1.8.6] 
        at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.8.6.jar:1.8.6] 
        at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.8.6.jar:1.8.6] 

高版本的丢弃了spring.security.basic.enabled这个属性,默认false那么如何开启呢?方法如下

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    /**
     * 高版本的丢弃了
     *
     * security:
     *   basic:
     *    enabled: true
     *
     * 配置,应该使用以下方式开启
     *
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Configure HttpSecurity as needed (e.g. enable http basic).
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
        http.csrf().disable();
        //注意:为了可以使用 http://${user}:${password}@${host}:${port}/eureka/ 这种方式登录,所以必须是httpBasic,
        // 如果是form方式,不能使用url格式登录
        http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
    }  

猜你喜欢

转载自blog.csdn.net/qq_40342015/article/details/83995169