摘要:時(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://github.com/yinjihuan/monkey-api-encrypt
本次更新內(nèi)容如下:
支持Spring Boot配置
支持注解開(kāi)啟加解密(Spring Boot中)
增加Spring MVC示例
手動(dòng)注冊(cè)過(guò)濾器使用@Configuration public class FilterConfig { @Bean public FilterRegistrationBeanSpring Boot Starter方式使用filterRegistration() { 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; } }
啟動(dòng)類(lèi)加@EnableEncrypt注解,開(kāi)啟加解密自動(dòng)配置,省略了手動(dòng)注冊(cè)Filter的步驟
@EnableEncrypt @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
配置文件中配置加密的信息,也就是EncryptionConfig
spring.encrypt.key=abcdef0123456789 spring.encrypt.requestDecyptUriList[0]=/save spring.encrypt.requestDecyptUriList[1]=/decryptEntityXml spring.encrypt.responseEncryptUriList[0]=/encryptStr spring.encrypt.responseEncryptUriList[1]=/encryptEntity spring.encrypt.responseEncryptUriList[2]=/save spring.encrypt.responseEncryptUriList[3]=/encryptEntityXml spring.encrypt.responseEncryptUriList[4]=/decryptEntityXml
如果感覺(jué)配置比較繁瑣,你的加解密接口很多,需要大量的配置,還可以采用另一種方式來(lái)標(biāo)識(shí)加解密,就是注解的方式。
響應(yīng)的數(shù)據(jù)需要加密,就在接口的方法上加@Encrypt注解
@Encrypt @GetMapping("/encryptEntity") public UserDto encryptEntity() { UserDto dto = new UserDto(); dto.setId(1); dto.setName("加密實(shí)體對(duì)象"); return dto; }
接收的數(shù)據(jù)需要解密,就在接口的方法上加@Decrypt注解
@Decrypt @PostMapping("/save") public UserDto save(@RequestBody UserDto dto) { System.err.println(dto.getId() + " " + dto.getName()); return dto; }
同時(shí)需要加解密那么兩個(gè)注解都加上即可
@Encrypt @Decrypt @PostMapping("/save") public UserDto save(@RequestBody UserDto dto) { System.err.println(dto.getId() + " " + dto.getName()); return dto; }Spring MVC中使用
Spring MVC中可以直接在web.xml中注冊(cè)Filter,不方便傳遞的是配置的參數(shù),我們可以配置一個(gè)自定的過(guò)濾器,然后在這個(gè)過(guò)濾器中配置EncryptionFilter
public class ApiEncryptionFilter implements Filter { EncryptionFilter filter = null; @Override public void init(FilterConfig filterConfig) throws ServletException { EncryptionConfig config = new EncryptionConfig(); config.setKey("abcdef0123456789"); config.setRequestDecyptUriList(Arrays.asList("/save")); config.setResponseEncryptUriList(Arrays.asList("/encryptEntity")); filter = new EncryptionFilter(config); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { filter.doFilter(request, response, chain); } @Override public void destroy() { } }
web.xml
自定義加解密過(guò)濾器 ApiEncryptionFilter com.cxytiandi.mvc.filter.ApiEncryptionFilter ApiEncryptionFilter /*
如果需要使用注解的話(huà)需要在spring的xml中配置ApiEncryptDataInit
注意事項(xiàng)
要么使用手動(dòng)注冊(cè)Filter的方式開(kāi)啟加解密功能,手動(dòng)構(gòu)造EncryptionConfig傳入EncryptionFilter中,要么使用@EnableEncrypt開(kāi)啟加解密功能。
@EnableEncrypt+配置文件可以在Spring Boot,Spring Cloud Zuul中使用
@EnableEncrypt+@Encrypt+@Decrypt可以在Spring Boot,Spring MVC中使用
相同URI問(wèn)題
當(dāng)存在兩個(gè)相同的URI時(shí),比如GET請(qǐng)求的/user和POST的請(qǐng)求/user。如果只想對(duì)其中某一個(gè)進(jìn)行處理,我們的邏輯的是按照URI進(jìn)行匹配,這樣就會(huì)影響到另一個(gè),原因是URI是一樣的。
如果是使用@Encrypt+@Decrypt的方式,框架會(huì)自動(dòng)處理,會(huì)為每一個(gè)URI加上前綴來(lái)區(qū)分不同的請(qǐng)求方式。同時(shí)提供了擴(kuò)展的屬性值,在@Encrypt+@Decrypt中都有value屬性,可以手動(dòng)配置uri。因?yàn)槟承┛蚣懿皇怯玫腟pring MVC的注解,比如CXF,框架無(wú)法做到適配所有的注解,這個(gè)時(shí)候可以用uri屬性來(lái)配置。
配置格式為:請(qǐng)求類(lèi)型+訪(fǎng)問(wèn)的URI
get:/user post:/user
包括在配置文件中也可以采用前綴的方式來(lái)區(qū)分相同的URI。
歡迎加入我的知識(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://www.ezyhdfw.cn/yun/73507.html
摘要:關(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...
摘要:相比之前的變化內(nèi)置加密算法,可以配置不同的加密不再綁定,通過(guò)配置即可使用加解密框架也可以支持支持用戶(hù)自定義加密算法地址示例代碼沒(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)指定是否需要加解密。 原理...
摘要:官網(wǎng)歡迎您了解發(fā)布的功能。中使用提交功能管理頁(yè)面等項(xiàng)目資源的變更。 BlockLang 官網(wǎng):https://blocklang.com 歡迎您了解 Block Lang 0.2.0 發(fā)布的功能。此版本增加三個(gè)功能: 在項(xiàng)目中創(chuàng)建空頁(yè)面 在項(xiàng)目中創(chuàng)建分組 使用版本控制系統(tǒng)管理新創(chuàng)建的頁(yè)面 創(chuàng)建空頁(yè)面 頁(yè)面,等同 web 項(xiàng)目中的網(wǎng)頁(yè),或小程序中的頁(yè)面,其中包含頁(yè)面布局、頁(yè)面樣式和...
摘要:前幾天的北京阿里云峰會(huì),阿里巴巴正式宣布對(duì)外開(kāi)源長(zhǎng)期支持版本。此次,阿里巴巴發(fā)布的預(yù)覽版本對(duì)應(yīng)的版本。同時(shí)對(duì)于阿里云,會(huì)針對(duì)的兩個(gè)版本和隨阿里云鏡像發(fā)布,免費(fèi)提供給阿里云客戶(hù)使用。年月,發(fā)布,根據(jù)阿里大數(shù)據(jù)場(chǎng)景的定制版發(fā)布。 前幾天的北京阿里云峰會(huì),阿里巴巴正式宣布對(duì)外開(kāi)源 OpenJDK 長(zhǎng)期支持版本 Alibaba Dragonwell。作為 Java 全球管理組織 Java Co...
閱讀 1515·2021-09-22 15:43
閱讀 2219·2019-08-30 15:54
閱讀 1227·2019-08-30 10:51
閱讀 2150·2019-08-29 18:35
閱讀 483·2019-08-26 11:58
閱讀 2535·2019-08-26 11:38
閱讀 2501·2019-08-23 18:35
閱讀 3726·2019-08-23 18:33