Spring Cloud 如何保證微服務(wù)內(nèi)安全
一、簡(jiǎn)介
在微服務(wù)的架構(gòu)下,我們需要把系統(tǒng)的業(yè)務(wù)劃分成多個(gè)單一的微服務(wù)。每個(gè)微服務(wù)都會(huì)提供接口供其他微服務(wù)調(diào)用,在Dubbo中可以通過rmi、nio等實(shí)現(xiàn),Spring Cloud中是通過http調(diào)用的。
但有些時(shí)候,我們只希望用戶通過我們的網(wǎng)關(guān)調(diào)用微服務(wù),不允許用戶直接請(qǐng)求微服務(wù)。這時(shí)我們就可以借助Spring Security來保障安全。
二、使用步驟
2.1 在提供接口的微服務(wù)項(xiàng)目中配置Spring Security
1 首先在pom.xml引入Spring Security的相關(guān)配置,如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2 在qpplication.yml中配置賬號(hào)密碼,如下
security:
basic:
enabled: true
user:
name: sunbufu
password: 123456
3 此時(shí)訪問接口發(fā)現(xiàn)已經(jīng)需要認(rèn)證了。

輸入正確的賬號(hào)和密碼后就可以訪問了。
2.2在調(diào)用微服務(wù)項(xiàng)目中配置Feign的賬號(hào)密碼
1 在application.yml中配置賬號(hào)密碼
security:
user:
name: sunbufu
password: 123456
2 添加Feign的配置文件
package com.sunbufu.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import feign.auth.BasicAuthRequestInterceptor;
@Configuration
public class FeignConfiguration {
@Value("${security.user.name}")
private String userName;
@Value("${security.user.password}")
private String passWord;
@Bean
public BasicAuthRequestInterceptor basicAuthRequestInterceptor(){
return new BasicAuthRequestInterceptor(userName, passWord);
}
}
3 這樣完成后,就可以正常的訪問了。

三、實(shí)例

git源碼地址:https://github.com/sunbufu/sunbufu-cloud
下面是這4個(gè)工程的說明:
1. sunbufu-erueka:Eureka服務(wù)的工程
2. sunbufu-hello-face:服務(wù)接口的定義工程,其中包括定義微服務(wù)需要實(shí)現(xiàn)什么功能,其他微服務(wù)怎么調(diào)用,以及feign的配置
3. sunbufu-hello-impl:服務(wù)接口的實(shí)現(xiàn)工程,實(shí)現(xiàn)了sunbufu-hello-face定義的功能
4. sunbufu-hello-web:服務(wù)的網(wǎng)關(guān)工程,主要為了調(diào)用sunbufu-hello-face
Spring Cloud服務(wù)安全連接
Spring Cloud可以增加HTTP Basic認(rèn)證來增加服務(wù)連接的安全性。
1、加入security啟動(dòng)器
在maven配置文件中加入Spring Boot的security啟動(dòng)器。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
這樣,就開啟對(duì)服務(wù)連接的安全保護(hù),系統(tǒng)默認(rèn)為生成一個(gè)用戶名為”user”及一個(gè)隨機(jī)密碼,隨機(jī)密碼在服務(wù)啟動(dòng)的時(shí)候在日志中會(huì)打印出來。
2、自定義用戶名密碼
隨機(jī)密碼沒什么實(shí)際意義,我們需要一個(gè)固定的連接用戶名和密碼。
在應(yīng)用配置文件中加入以下配置即可。
security:
user:
name: admin
password: admin123456
這樣配置完后在連接這個(gè)服務(wù)的時(shí)候就會(huì)要求輸入用戶名和密碼,如果認(rèn)證失敗會(huì)返回401錯(cuò)誤。
{
"timestamp": 1502689874556,
"status": 401,
"error": "Unauthorized",
"message": "Bad credentials",
"path": "/test/save"
}
3、安全連接
1、注冊(cè)中心安全連接
username:password@ipaddress
2、Feign申明式服務(wù)安全連接
@FeignClient(name = "SERVICE", configuration = FeignAuthConfig.class)
public interface OrderService extends OrderAPI {
}
@Configuration
public class FeignAuthConfig {
@Bean
public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor("admin","admin123456");
}
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談java 增強(qiáng)型的for循環(huán) for each
下面小編就為大家?guī)硪黄獪\談java 增強(qiáng)型的for循環(huán) for each。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10
Maven項(xiàng)目web多圖片上傳及格式驗(yàn)證的實(shí)現(xiàn)
本文主要介紹了Maven項(xiàng)目web多圖片上傳及格式驗(yàn)證的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
MyBatis中多對(duì)多關(guān)系的映射和查詢
本文主要介紹了MyBatis中多對(duì)多關(guān)系的映射和查詢的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02
JavaWeb Struts文件上傳功能實(shí)現(xiàn)詳解
這篇文章主要為大家詳細(xì)介紹了JavaWeb Struts文件上傳功能實(shí)現(xiàn)過程,思路清晰,供大家參考,感興趣的小伙伴們可以參考一下2016-06-06
spring AOP自定義注解方式實(shí)現(xiàn)日志管理的實(shí)例講解
下面小編就為大家分享一篇spring AOP自定義注解方式實(shí)現(xiàn)日志管理的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
java使用三層架構(gòu)實(shí)現(xiàn)電影購(gòu)票系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java使用三層架構(gòu)實(shí)現(xiàn)電影購(gòu)票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
java后臺(tái)調(diào)用接口及處理跨域問題的解決
這篇文章主要介紹了java后臺(tái)調(diào)用接口,處理跨域的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03

