摘要:相比之前的變化內(nèi)置加密算法,可以配置不同的加密不再綁定,通過(guò)配置即可使用加解密框架也可以支持支持用戶自定義加密算法地址示例代碼沒(méi)有發(fā)布到中央倉(cāng)庫(kù),只發(fā)布到這個(gè)倉(cāng)庫(kù),大家也可以自行下載源碼打包傳到自己公司的私服上。
之前有寫(xiě)過(guò)一篇加密的文章《前后端API交互如何保證數(shù)據(jù)安全性》。主要是在Spring Boot中如何對(duì)接口的數(shù)據(jù)進(jìn)行自動(dòng)加解密操作,通過(guò)注解的方式來(lái)指定是否需要加解密。
原理也很簡(jiǎn)單,通過(guò)Spring提供的RequestBodyAdvice和ResponseBodyAdvice就可以對(duì)請(qǐng)求響應(yīng)做處理。
本來(lái)也是打算更新一下的,因?yàn)樵赟pring Cloud Zuul中也需要加解密,我的那個(gè)封裝就用不了。
恰巧上周肥朝大佬跟我聊了下,提供了一些非常有用的建議,于是周六花了一天時(shí)間重構(gòu)了一下加密的框架,不再以Spring Boot Starter的方式提供服務(wù),直接是一個(gè)jar包,基于Servlet層面來(lái)對(duì)數(shù)據(jù)進(jìn)行加解密處理。
相比之前的變化:
內(nèi)置AES加密算法,可以配置不同的加密key
不再綁定Spring Boot,通過(guò)配置Filter即可使用加解密
Spring Cloud Zuul框架也可以支持
支持用戶自定義加密算法
GitHub地址:https://github.com/yinjihuan/...
示例代碼:https://github.com/yinjihuan/...
monkey-api-encrypt沒(méi)有發(fā)布到Maven中央倉(cāng)庫(kù),只發(fā)布到j(luò)itpack這個(gè)倉(cāng)庫(kù),大家也可以自行下載源碼打包傳到自己公司的私服上。
自動(dòng)加解密的好處傳統(tǒng)做法如下:
// 客戶端傳來(lái)的數(shù)據(jù)就是加密好的字符串 public String add(String data) { // 1. 通過(guò)工具類將數(shù)據(jù)解密,然后序列化成對(duì)象使用 // 2. 處理業(yè)務(wù)邏輯,數(shù)據(jù)返回的時(shí)候用工具類將數(shù)據(jù)加密返回給客戶端 }
缺點(diǎn)是在每個(gè)業(yè)務(wù)方法中都要手動(dòng)的去處理加解密的邏輯。
通過(guò)使用monkey-api-encrypt的話可以讓開(kāi)發(fā)人員不需要關(guān)注加解密的邏輯,比如:
@PostMapping("/save") public UserResult add(@RequestBody User data) { UserResult result = new UserResult (); result.setXXX.... return result; }
上面的代碼跟平常寫(xiě)的一模一樣,沒(méi)有加解密的邏輯,需要對(duì)數(shù)據(jù)做加解密邏輯的時(shí)候,只需要配置一個(gè)過(guò)濾器,然后指定哪些URI需要加解密即可。下面來(lái)學(xué)習(xí)下如何使用monkey-api-encrypt。
快速使用下面以jitpack倉(cāng)庫(kù)示列
第一步:pom.xml中增加倉(cāng)庫(kù)地址
jitpack.io https://jitpack.io
第二步:增加項(xiàng)目依賴
com.github.yinjihuan monkey-api-encrypt 1.1.1
第三步:配置加解密過(guò)濾器(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是加解密的配置類,配置項(xiàng)目定義如下:
public class EncryptionConfig { /** * AES加密Key,長(zhǎng)度必須16 */ private String key = "d7b85f6e214abcda"; /** * 需要對(duì)響應(yīng)內(nèi)容進(jìn)行加密的接口URI自定義加密算法
* 比如:/user/list
* 不支持@PathVariable格式的URI */ private ListresponseEncryptUriList = new ArrayList (); /** * 需要對(duì)請(qǐng)求內(nèi)容進(jìn)行解密的接口URI
* 比如:/user/list
* 不支持@PathVariable格式的URI */ private ListrequestDecyptUriList = new ArrayList (); /** * 響應(yīng)數(shù)據(jù)編碼 */ private String responseCharset = "UTF-8"; /** * 開(kāi)啟調(diào)試模式,調(diào)試模式下不進(jìn)行加解密操作,用于像Swagger這種在線API測(cè)試場(chǎng)景 */ private boolean debug = false; }
內(nèi)置了AES加密算法對(duì)數(shù)據(jù)進(jìn)行加解密操作,同時(shí)用戶可以自定義算法來(lái)代替內(nèi)置的算法。
自定義算法需要實(shí)現(xiàn)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); } }
注冊(cè)Filter的時(shí)候指定算法:
EncryptionConfig config = new EncryptionConfig(); registration.setFilter(new EncryptionFilter(config, new RsaEncryptAlgorithm()));常見(jiàn)問(wèn)題 1. Spring Cloud Zuul中如何使用?
使用方式和Spring Boot中一樣,沒(méi)區(qū)別。
2. 如果需要所有請(qǐng)求都做加解密處理怎么辦?默認(rèn)不配置RequestDecyptUriList和ResponseEncryptUriList的情況下,就會(huì)對(duì)所有請(qǐng)求進(jìn)行處理(攔截器指定范圍內(nèi)的請(qǐng)求)
3. Swagger測(cè)試接口的時(shí)候怎么處理?可以開(kāi)啟調(diào)試模式,就不對(duì)請(qǐng)求做加解密處理,通過(guò)配置debug=true
4. RequestDecyptUriList和ResponseEncryptUriList能否支持/user/*模式匹配?過(guò)濾器本身就有這個(gè)功能了,所以框架中是完全匹配相等才可以,可以通過(guò)過(guò)濾器的 registration.addUrlPatterns("/user/","/order/");來(lái)指定需要處理的接口地址。
歡迎加入我的知識(shí)星球,一起交流技術(shù),免費(fèi)學(xué)習(xí)猿天地的課程(http://cxytiandi.com/course)文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73546.html
摘要:時(shí)隔多天,發(fā)布了第二個(gè)版本,還是要感謝一些正在使用的朋友們,提出了一些問(wèn)題。配置文件可以在中使用可以在,中使用相同問(wèn)題當(dāng)存在兩個(gè)相同的時(shí),比如請(qǐng)求的和的請(qǐng)求。如果是使用的方式,框架會(huì)自動(dòng)處理,會(huì)為每一個(gè)加上前綴來(lái)區(qū)分不同的請(qǐng)求方式。 時(shí)隔10多天,monkey-api-encrypt發(fā)布了第二個(gè)版本,還是要感謝一些正在使用的朋友們,提出了一些問(wèn)題。 GitHub主頁(yè):https://g...
摘要:關(guān)于框架的使用文章請(qǐng)參考前后端交互如何保證數(shù)據(jù)安全性數(shù)據(jù)加密框架版本發(fā)布啦今天的主題是帶領(lǐng)大家去了解框架的實(shí)現(xiàn)原理以及如何去封裝一個(gè)框架,封裝框架的時(shí)候需要考慮哪些東西。 關(guān)于框架的使用文章請(qǐng)參考: 前后端API交互如何保證數(shù)據(jù)安全性?:http://cxytiandi.com/blog/det... API數(shù)據(jù)加密框架monkey-api-encrypt:http://cxytian...
摘要:我們的目標(biāo)是找出最有職業(yè)投資回報(bào)率的主題和技術(shù)。比特幣在幾年內(nèi)增長(zhǎng)了若干個(gè)量級(jí)。比特幣倍拐點(diǎn)在這個(gè)圖表中,每個(gè)箭頭始于倍點(diǎn),指向價(jià)格修正后的最低點(diǎn)。 showImg(https://segmentfault.com/img/remote/1460000017919159); 圖:Jon Glittenberg Happy New Year 2019 (CC BY 2.0) 又到了一年的...
摘要:簡(jiǎn)單字符串緩存實(shí)戰(zhàn)完整實(shí)戰(zhàn)種設(shè)計(jì)模式設(shè)計(jì)模式是面向?qū)ο蟮淖罴褜?shí)踐成為專業(yè)程序員路上用到的各種優(yōu)秀資料神器及框架成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 微型新聞系統(tǒng)的開(kāi)發(fā)(PHP 5.4 + MySQL 5.5) 微型新聞系統(tǒng)的開(kāi)發(fā)(PHP 5.4 + MySQL 5.5) 九個(gè)很有用的 PHP 代碼 php 代碼 國(guó)內(nèi)值得關(guān)注的...
摘要:的很容易反映出常見(jiàn)的工作流程。權(quán)限檢查是執(zhí)行授權(quán)的另一種方式。在安全框架領(lǐng)域提供了一些獨(dú)特的東西一致的會(huì)話,可用于任何應(yīng)用程序和任何架構(gòu)層。 Apache Shiro?是一個(gè)功能強(qiáng)大且易于使用的Java安全框架,可執(zhí)行身份驗(yàn)證,授權(quán),加密和會(huì)話管理。借助Shiro易于理解的API,可以快速輕松地保護(hù)任何應(yīng)用程序 - 從最小的移動(dòng)應(yīng)用程序到最大的Web和企業(yè)應(yīng)用程序。 1. Apache S...
閱讀 544·2023-04-26 01:39
閱讀 4523·2021-11-16 11:45
閱讀 2623·2021-09-27 13:37
閱讀 899·2021-09-01 10:50
閱讀 3610·2021-08-16 10:50
閱讀 2231·2019-08-30 15:55
閱讀 2995·2019-08-30 15:55
閱讀 2265·2019-08-30 14:07