时隔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版本发布啦的更多相关文章

  1. JDK 7u60 版本发布下载安装

    JDK 7u60 版本发布了,主要改进包括: JavaFX 更新到 2.2.60 Java Mission Control(JMC)更新到 5.3 如果你在一个早期版本的Java中禁用了过期检查功能, ...

  2. 面向UI编程:ui.js 1.0 粗糙版本发布,分布式开发+容器化+组件化+配置化框架,从无到有的艰难创造

    时隔第一次被UI思路激励,到现在1.0的粗糙版本发布,掐指一算整整半年了.半年之间,有些细节不断推翻重做,再推翻再重做.时隔今日,终于能先出来个东西了,这个版本很粗糙,主体功能大概能实现了,但是还是有 ...

  3. 英语词典Alpha版本发布说明

    Alpha版本发布说明 功能: ·简洁的应用界面,不被无良的广告弹窗影响  ·功能直接,在需要查词时及时出现,没有每日一句精选文章等杀了你的流量,在学习过程中更加专注! ·采用金山词霸API,提供发音 ...

  4. 【翻译】Ext JS 6.2 早期访问版本发布

    原文:Announcing Ext JS 6.2 Early Access 非常开心,Sencha Ext JS 6.2早期访问版本今天发布了.早期访问版本的主要目的是为了让大家进行测试并评估Ext ...

  5. CAP 2.4版本发布,支持版本隔离特性

    前言 自从上次 CAP 2.3 版本发布 以来,已经过去了几个月的时间,这几个月比较忙,所以也没有怎么写博客,趁着2019年到来之际(现在应该是2019年开始的时候),CAP也发布了2018年的最后一 ...

  6. 意料之外,情理之中,Spring.NET 3.0 版本发布-

    意料之外,情理之中,Spring.NET 3.0 版本发布- 备受社区和企业开发者广泛关注的Spring.NET在上周发布了3.0版本,并且目前已经保持着持续的更新,让我们一起来看一看他究竟发布了哪些 ...

  7. JAVA版开源微信管家—JeeWx捷微3.2版本发布,支持微信公众号,微信企业号,支付窗、小程序

    JeeWx捷微3.2微信企业号升级版本发布^_^ JeeWx捷微V3.2——多触点管理平台(支持微信公众号,微信企业号,支付窗.小程序)   JeeWx捷微V3.2.0版本引入了更多新特性,支持微信公 ...

  8. android 6 (API 23) 及更高版本 面向 NDK 开发者的 Android 变更

    Android N 已经出来,有了好大的变化,对于我们开发者来说,最大的影响莫过于**NDK**相关东西. 以下是在中国谷歌开发者社区看到的.里面有好多的变化,欢迎大家来讨论. 发布人:开发顾问 Dm ...

  9. Kafka 1.0版本发布

    Kafka 1.0版本发布 1.0.0 2017年11月1日发布 源码下载: kafka-1.0.0-src.tgz(asc,sha512) 二进制下载: Scala 2.11 - kafka_2.1 ...

  10. 团队作业——团队项目Alpha版本发布

    该作业所属课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求链接    https://edu.cnblogs. ...

随机推荐

  1. 短的 Guid 帮助类

    直接贴代码了: /// <summary> /// 短的 Guid 帮助类 /// </summary> public class ShortGuidHelper { #reg ...

  2. 【论文阅读】Objects as Points 又名 CenterNet | 目标检测

    目录 Abstract Instruction 分析 CenterNet 的Loss公式 第一部分:\(L_k\) 第二部分:\(L_{size}\) 第三部分:\(L_{off}\) Abstrac ...

  3. Java实现QQ邮件发送

    首先我们需要两个jar包,点击下面即可下载这两个包: JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 我们这里采用QQ邮箱发送邮件为例,代码如 ...

  4. SAP 同一个序列号可以同时出现在2个不同的HU里?

    SAP 同一个序列号可以同时出现在2个不同的HU里? 答案是可以的. 如下图示,HU 180141003288里的序列号11810010540121, 而序列号11810010540121已经出现在另 ...

  5. flink WaterMark之TumblingEventWindow

    1.WaterMark,翻译成水印或水位线,水印翻译更抽象,水位线翻译接地气. watermark是用于处理乱序事件的,通常用watermark机制结合window来实现. 流处理从事件产生,到流经s ...

  6. 2.dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据

    作者:中华石杉 面试题 dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的? 面试官心理分析 上一个问题,说说 dubbo ...

  7. centos7 ntp server & samba

    最近公司内部一个需求:必须 Linux建个 ntp server ,并且 Windows可以net time \\ip 访问. 想要解决问题,还得解决前置问题. 服务器不能上网,无法直接访问外部 yu ...

  8. Java使用MD5加密算法,实现等登陆功能

    Java实现MD5加密 为了保护有些数据,就需要采取一些手段来进行数据的加密,防止被别人破解. MD5简介 md5的全称是md5信息摘要算法(英文:MD5 Message-Digest Algorit ...

  9. MATLAB之指定文件读取与读取地址输出

    一.读取指定文件夹下的指定格式文件 (1) 利用命令 uigetdir('','') 参数解释: uigetdir('所要打开的盘地址','对打开的弹出框进行描述') 例如:uigetdir('C:\ ...

  10. lf 前后端分离 (5) 优惠券

    关于优惠券 优惠券主要通过前端传回来的course_id_list 创建数据结构 首先清空操作,将所有的优惠券清空, 并将所有优惠劵放到redis中的过程 import datetime import ...