1.spring cloud服務註冊中心eureka server---新增Security使用者認證(第四章)
阿新 • • 發佈:2018-11-13
為服務註冊中心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();
}