1. 程式人生 > >1.spring cloud服務註冊中心eureka server---新增Security使用者認證(第四章)

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:[email protected]: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();
    }