摘要:相比之前的變化內置加密算法,可以配置不同的加密不再綁定,通過配置即可使用加解密框架也可以支持支持用戶自定義加密算法地址示例代碼沒有發布到中央倉庫,只發布到這個倉庫,大家也可以自行下載源碼打包傳到自己公司的私服上。
之前有寫過一篇加密的文章《前后端API交互如何保證數據安全性》。主要是在Spring Boot中如何對接口的數據進行自動加解密操作,通過注解的方式來指定是否需要加解密。
原理也很簡單,通過Spring提供的RequestBodyAdvice和ResponseBodyAdvice就可以對請求響應做處理。
本來也是打算更新一下的,因為在Spring Cloud Zuul中也需要加解密,我的那個封裝就用不了。
恰巧上周肥朝大佬跟我聊了下,提供了一些非常有用的建議,于是周六花了一天時間重構了一下加密的框架,不再以Spring Boot Starter的方式提供服務,直接是一個jar包,基于Servlet層面來對數據進行加解密處理。
相比之前的變化:
內置AES加密算法,可以配置不同的加密key
不再綁定Spring Boot,通過配置Filter即可使用加解密
Spring Cloud Zuul框架也可以支持
支持用戶自定義加密算法
GitHub地址:https://github.com/yinjihuan/...
示例代碼:https://github.com/yinjihuan/...
monkey-api-encrypt沒有發布到Maven中央倉庫,只發布到jitpack這個倉庫,大家也可以自行下載源碼打包傳到自己公司的私服上。
自動加解密的好處傳統做法如下:
// 客戶端傳來的數據就是加密好的字符串 public String add(String data) { // 1. 通過工具類將數據解密,然后序列化成對象使用 // 2. 處理業務邏輯,數據返回的時候用工具類將數據加密返回給客戶端 }
缺點是在每個業務方法中都要手動的去處理加解密的邏輯。
通過使用monkey-api-encrypt的話可以讓開發人員不需要關注加解密的邏輯,比如:
@PostMapping("/save") public UserResult add(@RequestBody User data) { UserResult result = new UserResult (); result.setXXX.... return result; }
上面的代碼跟平常寫的一模一樣,沒有加解密的邏輯,需要對數據做加解密邏輯的時候,只需要配置一個過濾器,然后指定哪些URI需要加解密即可。下面來學習下如何使用monkey-api-encrypt。
快速使用下面以jitpack倉庫示列
第一步:pom.xml中增加倉庫地址
jitpack.io https://jitpack.io
第二步:增加項目依賴
com.github.yinjihuan monkey-api-encrypt 1.1.1
第三步:配置加解密過濾器(Spring Boot中配置方式)
@Configuration public class FilterConfig { @Bean public FilterRegistrationBeanfilterRegistration() { EncryptionConfig config = new EncryptionConfig(); config.setKey("abcdef0123456789"); config.setRequestDecyptUriList(Arrays.asList("/save", "/decryptEntityXml")); config.setResponseEncryptUriList(Arrays.asList("/encryptStr", "/encryptEntity", "/save", "/encryptEntityXml", "/decryptEntityXml")); FilterRegistrationBean registration = new FilterRegistrationBean (); registration.setFilter(new EncryptionFilter(config)); registration.addUrlPatterns("/*"); registration.setName("EncryptionFilter"); registration.setOrder(1); return registration; } }
EncryptionConfig
EncryptionConfig是加解密的配置類,配置項目定義如下:
public class EncryptionConfig { /** * AES加密Key,長度必須16 */ private String key = "d7b85f6e214abcda"; /** * 需要對響應內容進行加密的接口URI自定義加密算法
* 比如:/user/list
* 不支持@PathVariable格式的URI */ private ListresponseEncryptUriList = new ArrayList (); /** * 需要對請求內容進行解密的接口URI
* 比如:/user/list
* 不支持@PathVariable格式的URI */ private ListrequestDecyptUriList = new ArrayList (); /** * 響應數據編碼 */ private String responseCharset = "UTF-8"; /** * 開啟調試模式,調試模式下不進行加解密操作,用于像Swagger這種在線API測試場景 */ private boolean debug = false; }
內置了AES加密算法對數據進行加解密操作,同時用戶可以自定義算法來代替內置的算法。
自定義算法需要實現EncryptAlgorithm接口:
/** * 自定義RSA算法 * * @author yinjihuan * * @date 2019-01-12 * * @about http://cxytiandi.com/about * */ public class RsaEncryptAlgorithm implements EncryptAlgorithm { public String encrypt(String content, String encryptKey) throws Exception { return RSAUtils.encryptByPublicKey(content); } public String decrypt(String encryptStr, String decryptKey) throws Exception { return RSAUtils.decryptByPrivateKey(encryptStr); } }
注冊Filter的時候指定算法:
EncryptionConfig config = new EncryptionConfig(); registration.setFilter(new EncryptionFilter(config, new RsaEncryptAlgorithm()));常見問題 1. Spring Cloud Zuul中如何使用?
使用方式和Spring Boot中一樣,沒區別。
2. 如果需要所有請求都做加解密處理怎么辦?默認不配置RequestDecyptUriList和ResponseEncryptUriList的情況下,就會對所有請求進行處理(攔截器指定范圍內的請求)
3. Swagger測試接口的時候怎么處理?可以開啟調試模式,就不對請求做加解密處理,通過配置debug=true
4. RequestDecyptUriList和ResponseEncryptUriList能否支持/user/*模式匹配?過濾器本身就有這個功能了,所以框架中是完全匹配相等才可以,可以通過過濾器的 registration.addUrlPatterns("/user/","/order/");來指定需要處理的接口地址。
歡迎加入我的知識星球,一起交流技術,免費學習猿天地的課程(http://cxytiandi.com/course)文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73546.html
摘要:時隔多天,發布了第二個版本,還是要感謝一些正在使用的朋友們,提出了一些問題。配置文件可以在中使用可以在,中使用相同問題當存在兩個相同的時,比如請求的和的請求。如果是使用的方式,框架會自動處理,會為每一個加上前綴來區分不同的請求方式。 時隔10多天,monkey-api-encrypt發布了第二個版本,還是要感謝一些正在使用的朋友們,提出了一些問題。 GitHub主頁:https://g...
摘要:關于框架的使用文章請參考前后端交互如何保證數據安全性數據加密框架版本發布啦今天的主題是帶領大家去了解框架的實現原理以及如何去封裝一個框架,封裝框架的時候需要考慮哪些東西。 關于框架的使用文章請參考: 前后端API交互如何保證數據安全性?:http://cxytiandi.com/blog/det... API數據加密框架monkey-api-encrypt:http://cxytian...
摘要:我們的目標是找出最有職業投資回報率的主題和技術。比特幣在幾年內增長了若干個量級。比特幣倍拐點在這個圖表中,每個箭頭始于倍點,指向價格修正后的最低點。 showImg(https://segmentfault.com/img/remote/1460000017919159); 圖:Jon Glittenberg Happy New Year 2019 (CC BY 2.0) 又到了一年的...
摘要:的很容易反映出常見的工作流程。權限檢查是執行授權的另一種方式。在安全框架領域提供了一些獨特的東西一致的會話,可用于任何應用程序和任何架構層。 Apache Shiro?是一個功能強大且易于使用的Java安全框架,可執行身份驗證,授權,加密和會話管理。借助Shiro易于理解的API,可以快速輕松地保護任何應用程序 - 從最小的移動應用程序到最大的Web和企業應用程序。 1. Apache S...
閱讀 540·2023-04-26 01:39
閱讀 4506·2021-11-16 11:45
閱讀 2616·2021-09-27 13:37
閱讀 886·2021-09-01 10:50
閱讀 3595·2021-08-16 10:50
閱讀 2222·2019-08-30 15:55
閱讀 2987·2019-08-30 15:55
閱讀 2262·2019-08-30 14:07