monkey-api-encrypt 1.1.2版本發布啦
時隔10多天,monkey-api-encrypt發布了第二個版本,還是要感謝一些正在使用的朋友們,提出了一些問題。
GitHub主頁:https://github.com/yinjihuan/monkey-api-encrypt
本次更新內容如下:
- 支持Spring Boot配置
- 支持註解開啟加解密(Spring Boot中)
- 增加Spring MVC示例
手動註冊過濾器使用
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean<EncryptionFilter> filterRegistration() { EncryptionConfig config = new EncryptionConfig(); config.setKey("abcdef0123456789"); config.setRequestDecyptUriList(Arrays.asList("/save", "/decryptEntityXml")); config.setResponseEncryptUriList(Arrays.asList("/encryptStr", "/encryptEntity", "/save", "/encryptEntityXml", "/decryptEntityXml")); FilterRegistrationBean<EncryptionFilter> registration = new FilterRegistrationBean<EncryptionFilter>(); registration.setFilter(new EncryptionFilter(config)); registration.addUrlPatterns("/*"); registration.setName("EncryptionFilter"); registration.setOrder(1); return registration; } }
Spring Boot Starter方式使用
啟動類加@EnableEncrypt註解,開啟加解密自動配置,省略了手動註冊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
如果感覺配置比較繁瑣,你的加解密接口很多,需要大量的配置,還可以采用另一種方式來標識加解密,就是註解的方式。
響應的數據需要加密,就在接口的方法上加@Encrypt註解
@Encrypt
@GetMapping("/encryptEntity")
public UserDto encryptEntity() {
UserDto dto = new UserDto();
dto.setId(1);
dto.setName("加密實體對象");
return dto;
}
接收的數據需要解密,就在接口的方法上加@Decrypt註解
@Decrypt
@PostMapping("/save")
public UserDto save(@RequestBody UserDto dto) {
System.err.println(dto.getId() + "\t" + dto.getName());
return dto;
}
同時需要加解密那麽兩個註解都加上即可
@Encrypt
@Decrypt
@PostMapping("/save")
public UserDto save(@RequestBody UserDto dto) {
System.err.println(dto.getId() + "\t" + dto.getName());
return dto;
}
Spring MVC中使用
Spring MVC中可以直接在web.xml中註冊Filter,不方便傳遞的是配置的參數,我們可以配置一個自定的過濾器,然後在這個過濾器中配置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
<filter>
<description>自定義加解密過濾器</description>
<filter-name>ApiEncryptionFilter</filter-name>
<filter-class>com.cxytiandi.mvc.filter.ApiEncryptionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ApiEncryptionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果需要使用註解的話需要在spring的xml中配置ApiEncryptDataInit
<bean id="apiEncryptDataInit" class="com.cxytiandi.encrypt.springboot.init.ApiEncryptDataInit"></bean>
註意事項
要麽使用手動註冊Filter的方式開啟加解密功能,手動構造EncryptionConfig傳入EncryptionFilter中,要麽使用@EnableEncrypt開啟加解密功能。
@EnableEncrypt+配置文件可以在Spring Boot,Spring Cloud Zuul中使用
@EnableEncrypt+@Encrypt+@Decrypt可以在Spring Boot,Spring MVC中使用
相同URI問題
當存在兩個相同的URI時,比如GET請求的/user和POST的請求/user。如果只想對其中某一個進行處理,我們的邏輯的是按照URI進行匹配,這樣就會影響到另一個,原因是URI是一樣的。
如果是使用@Encrypt+@Decrypt的方式,框架會自動處理,會為每一個URI加上前綴來區分不同的請求方式。同時提供了擴展的屬性值,在@Encrypt+@Decrypt中都有value屬性,可以手動配置uri。因為某些框架不是用的Spring MVC的註解,比如CXF,框架無法做到適配所有的註解,這個時候可以用uri屬性來配置。
配置格式為:請求類型+訪問的URI
get:/user
post:/user
包括在配置文件中也可以采用前綴的方式來區分相同的URI。
歡迎加入我的知識星球,一起交流技術,免費學習猿天地的課程(http://cxytiandi.com/course)
monkey-api-encrypt 1.1.2版本發布啦