资讯专栏INFORMATION COLUMN

monkey-api-encrypt 1.1.2版本发布啦

blair / 3042人阅读

摘要:时隔多天,发布了第二个版本,还是要感谢一些正在使用的朋友们,提出了一些问题。配置文件可以在中使用可以在,中使用相同问题当存在两个相同的时,比如请求的和的请求。如果是使用的方式,框架会自动处理,会为每一个加上前缀来区分不同的请求方式。

时隔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 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;
    }

}
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() + "	" + dto.getName());
    return dto;
}

同时需要加解密那么两个注解都加上即可

@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中注册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


        自定义加解密过滤器  
        ApiEncryptionFilter
        com.cxytiandi.mvc.filter.ApiEncryptionFilter



        ApiEncryptionFilter
        /*
 

如果需要使用注解的话需要在spring的xml中配置ApiEncryptDataInit

注意事项

要么使用手动注册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)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73507.html

相关文章

  • API加密框架原理解密

    摘要:关于框架的使用文章请参考前后端交互如何保证数据安全性数据加密框架版本发布啦今天的主题是带领大家去了解框架的实现原理以及如何去封装一个框架,封装框架的时候需要考虑哪些东西。 关于框架的使用文章请参考: 前后端API交互如何保证数据安全性?:http://cxytiandi.com/blog/det... API数据加密框架monkey-api-encrypt:http://cxytian...

    MAX_zuo 评论0 收藏0
  • API数据加密框架monkey-api-encrypt

    摘要:相比之前的变化内置加密算法,可以配置不同的加密不再绑定,通过配置即可使用加解密框架也可以支持支持用户自定义加密算法地址示例代码没有发布到中央仓库,只发布到这个仓库,大家也可以自行下载源码打包传到自己公司的私服上。 之前有写过一篇加密的文章《前后端API交互如何保证数据安全性》。主要是在Spring Boot中如何对接口的数据进行自动加解密操作,通过注解的方式来指定是否需要加解密。 原理...

    BetaRabbit 评论0 收藏0
  • BlockLang 0.2.0 发布

    摘要:官网欢迎您了解发布的功能。中使用提交功能管理页面等项目资源的变更。 BlockLang 官网:https://blocklang.com 欢迎您了解 Block Lang 0.2.0 发布的功能。此版本增加三个功能: 在项目中创建空页面 在项目中创建分组 使用版本控制系统管理新创建的页面 创建空页面 页面,等同 web 项目中的网页,或小程序中的页面,其中包含页面布局、页面样式和...

    alphahans 评论0 收藏0
  • 重磅发布:阿里 OpenJDK终于开源! 将长期支持版本 Dragonwell

    摘要:前几天的北京阿里云峰会,阿里巴巴正式宣布对外开源长期支持版本。此次,阿里巴巴发布的预览版本对应的版本。同时对于阿里云,会针对的两个版本和随阿里云镜像发布,免费提供给阿里云客户使用。年月,发布,根据阿里大数据场景的定制版发布。 前几天的北京阿里云峰会,阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell。作为 Java 全球管理组织 Java Co...

    andot 评论0 收藏0

发表评论

0条评论

blair

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<