Spring Cloud 如何保證微服務(wù)內(nèi)安全
一、簡介
在微服務(wù)的架構(gòu)下,我們需要把系統(tǒng)的業(yè)務(wù)劃分成多個單一的微服務(wù)。每個微服務(wù)都會提供接口供其他微服務(wù)調(diào)用,在Dubbo中可以通過rmi、nio等實現(xiàn),Spring Cloud中是通過http調(diào)用的。
但有些時候,我們只希望用戶通過我們的網(wǎng)關(guān)調(diào)用微服務(wù),不允許用戶直接請求微服務(wù)。這時我們就可以借助Spring Security來保障安全。
二、使用步驟
2.1 在提供接口的微服務(wù)項目中配置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中配置賬號密碼,如下
security: basic: enabled: true user: name: sunbufu password: 123456
3 此時訪問接口發(fā)現(xiàn)已經(jīng)需要認(rèn)證了。
輸入正確的賬號和密碼后就可以訪問了。
2.2在調(diào)用微服務(wù)項目中配置Feign的賬號密碼
1 在application.yml中配置賬號密碼
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 這樣完成后,就可以正常的訪問了。
三、實例
git源碼地址:https://github.com/sunbufu/sunbufu-cloud
下面是這4個工程的說明:
1. sunbufu-erueka:Eureka服務(wù)的工程
2. sunbufu-hello-face:服務(wù)接口的定義工程,其中包括定義微服務(wù)需要實現(xiàn)什么功能,其他微服務(wù)怎么調(diào)用,以及feign的配置
3. sunbufu-hello-impl:服務(wù)接口的實現(xiàn)工程,實現(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啟動器
在maven配置文件中加入Spring Boot的security啟動器。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
這樣,就開啟對服務(wù)連接的安全保護(hù),系統(tǒng)默認(rèn)為生成一個用戶名為”user”及一個隨機密碼,隨機密碼在服務(wù)啟動的時候在日志中會打印出來。
2、自定義用戶名密碼
隨機密碼沒什么實際意義,我們需要一個固定的連接用戶名和密碼。
在應(yīng)用配置文件中加入以下配置即可。
security: user: name: admin password: admin123456
這樣配置完后在連接這個服務(wù)的時候就會要求輸入用戶名和密碼,如果認(rèn)證失敗會返回401錯誤。
{ "timestamp": 1502689874556, "status": 401, "error": "Unauthorized", "message": "Bad credentials", "path": "/test/save" }
3、安全連接
1、注冊中心安全連接
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"); } }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud+MyBatis分頁處理(前后端分離)
這篇文章主要為大家詳細(xì)介紹了SpringCloud+MyBatis分頁處理,前后端分離,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-10-10jvm中指定時區(qū)信息user.timezone問題及解決方式
同一份程序使用時間LocalDateTime類型,在國內(nèi)和國外部署后,返回的時間信息前端使用出問題,這篇文章主要介紹了jvm中指定時區(qū)信息user.timezone問題及解決方法,需要的朋友可以參考下2023-02-02java集合框架的體系結(jié)構(gòu)詳細(xì)說明
最近在一本J2EE的書中看到了很不錯的對集合框架的說明文章2012-11-11minio的下載和springboot整合minio使用方法
本文介紹了如何通過Docker拉取MinIO鏡像,并創(chuàng)建MinIO容器的過程,首先,需要在本地創(chuàng)建/data和/conf兩個目錄用于掛載MinIO的數(shù)據(jù)和配置文件,接下來,通過docker?run命令啟動容器,設(shè)置MinIO的訪問端口、用戶名、密碼等信息,感興趣的朋友一起看看吧2024-09-09Java?DirectByteBuffer堆外內(nèi)存回收詳解
這篇文章主要為大家詳細(xì)介紹了Java中發(fā)DirectByteBuffer堆外內(nèi)存回收,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以參考一下2022-10-10