SpringBoot微服務電商項目開發實戰 --- api接口安全算法、AOP切面及防SQL注入實現

上一篇主要講了整個項目的子模塊及第三方依賴的版本號統一管理維護,數據庫對接及緩存(Redis)接入,今天我來講說過濾器配置及攔截設置、接口安全處理、AOP切面實現等。做爲電商項目,不只要求考慮高併發帶來的壓力,更要考慮項目的安全穩固及可擴展。首先咱們說說接口安全。web

一,接口安全面試

提及安全,這彷佛是IT行業一直以來的重點話題。實際真正的項目安全,更多的是運維工程師(安全專家)從網絡和服務器層面保護。目前基本每一個大的互聯網公司都有一個安全團隊(推薦你們瞭解下阿里安全專家吳翰清)。今天我要說的只是接口安全防禦(如何防止惡意請求、數據篡改),這也是好多中高級開發者常常在面試中被問到的話題。首先我說說思路,目前接口安全的基本防禦方案就是:令牌+簽名,也有采用非對稱加密密文傳輸,https協議傳輸等方案。sql

1,令牌+簽名數據庫

這是今天要說的重點,令牌+簽名到底怎麼實現接口安全請求呢?緩存

簽名實現:最簡單的實現就是先把你要請求的參數轉化爲字符串,再經過MD5給這個字符串加密,而後將加密後的字符串做爲簽名參數。Java後臺再寫一個過濾器,當請求進入過濾器,先取出參數在過濾器裏按照這個規則生成校驗。但在實際開發中,這種方式很容易被他人模仿請求你的接口,那怎麼辦呢?其實很簡單,給MD5生成的那個簽名「撒鹽」,也就是給那個簽名的字符串裏的某個或某些片斷植入隨機字符串,而後在後臺過濾器校驗時,把這個片斷內容取出替換後臺生成的參數簽名裏的那個片斷再對比校驗。安全

令牌實現:令牌也就是咱們常說的token,在用戶登陸後,生成一個惟一的token,並將這個token做爲key,登陸者信息(通常都是封裝的登陸實體類)做爲值存到Redis中,並將token返回給用戶。用戶要訪問其餘接口,那你就必須帶token,在過濾器檢驗完簽名後,而後取到請求參數裏的token,再查詢Redis檢驗Token是否有效,校驗不經過直接攔截返回。服務器

部分代碼片斷網絡

注意,這裏都是以封裝的實體和工具類處理返回。返回實體及返回工具類代碼以下:併發

 

 

自定義異常枚舉類:運維

注意:過濾器的必定要實現Filter接口,並添加註解

@WebFilter(filterName = "myFilter",urlPatterns = {"/*"}),如:

@WebFilter(filterName = "myFilter",urlPatterns = {"/*"})
public class MyFilter implements Filter {

而後重寫doFilter()方法。

2,非對稱密文傳輸

這個方案實現起來很簡單,能夠先用RSA生成一對密鑰(公鑰何私鑰),服務端保存私鑰,公鑰給要訪問的客戶端,客戶端在請求接口時,把參數用RSA公鑰加密,服務端接收到客戶端請求傳入的密文,用本身的私鑰解密。這樣就算有人獲取到你的請求密文,甚至獲取到客戶端的公鑰,那也沒用,解不開,哪有人說了,若是拿到公鑰了,就能夠隨意請求你的接口了。哪有你想的那麼簡單,後臺能夠在過濾器再加個校驗簽名不就解決了。對通常的接口,是不必使用非對稱密文傳輸的,加密解密須要時間開銷,因此針對不一樣的業務場景,選擇合適本身的方案。

3,令牌+簽名方案測試驗證

這裏我啓動服務測試一下,先在啓動類裏添加包掃描,而後啓動服務測試。

在啓動服務前,已寫好的接口(用戶的添加和登陸接口)。

參數不帶token和簽名請求添加用戶接口。

參數裏隨機添加簽名(未按約定規則生成)請求接口。

參數裏的簽名按規則生成併發請求,這時開始驗證token。

那麼我先登陸,獲取token再發起請求。

再看看數據庫。

二,AOP切面實現

這裏用Aop主要實現日誌及異常處理,首先咱們在接口層(lyn-web)建立一個Aop的切面類,以下:

定義好切面,而後寫前置通知,後置通知,環繞通知。

前置通知主要打印了請求接口、IP、接口請求方式等信息,環繞通知抓取了接口的響應時間和異常處理,後置通知打印了相應的參數。接下來我將使用Aop實現一些其餘功能。

三,防SQL注入實現

先寫一個非法字符檢驗工具類:

而後在AOP裏寫一個參數檢查方法:

再在環繞通知裏執行訪問接口前操做執行檢查方法

測試,參數帶sql注入關鍵詞(Drop  user_info)發起請求。

看打印的日誌:

那咱們去掉去掉非法關鍵詞再發起請求:

再看看日誌:

添加成功的數據庫數據:

推薦閱讀:

Spring Boot實現分佈式微服務開發實戰系列(三)

Spring Boot實現分佈式微服務開發實戰系列(二)

Spring Boot實現分佈式微服務開發實戰系列(一)

下期文章:深刻介紹項目的配置,優化相關,以及緩存安全防範,Kafka的對接等內容。

 

獲取項目源代碼,請掃碼關注公衆號,併發送Springboot獲取。

相關文章
相關標籤/搜索