当前位置:   article > 正文

学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密(方式二)_requestparam 入参加密

requestparam 入参加密

前言:

       前一篇已经说完了一种rsa+aes混合加密的方式,后端采用实体类或map或者jsonObject方式来接收入参,本文要说的不采用这几种形式来入参,而是采用自定义的@RequestParam来接收参数
1.解决参数要判断的问题
2.解决代码重复太多的问题

demo下载地址:https://download.csdn.net/download/baidu_38990811/10809893

实现步骤:

1.创建spring boot项目,导入相关依赖,
2.编写RSA加解密工具类,AES加解密工具类
3.编写自定义注解SecurityParameter(让加解密细粒度),
编写自定义注解RequestParam(参数绑定使用),记住这个注解是自定义的,和spring mvc的入参的某个名称一致,但是具体实现不一样
4.编写自定义MyMethodArgumentResolver和EncodeResponseAdvice
5.创建自定义类RepeatedlyReadFilter(复制body数据,可以进行多次读取body数据),创建自定义类RepeatedlyReadRequestWrapper(读取数据),创建自定义类RepeatedlyReadInterceptor(可以不创建)
6.创建配置类WebMvcConfig(配置拦截器,过滤器,参数解析器)

7.创建controller
8.创建jsp或者html,引入js(加密和解密的通用js),还有配置,配置文件
ps:因为这里没https证书,所有使用http, 
考虑到前后端分离,使用json来传递数据,

红色标注的就是和前面一篇方式不同的地方(其实就是懒,想把入参简单化)

实践步骤(这里加密key都是采用前一篇文章的key):

1.第一步,略(参考前一篇文章)
2.第二步,略(参考前一篇文章)
3.自定义注解

  1. import org.springframework.web.bind.annotation.Mapping;
  2. import java.lang.annotation.*;
  3. /**
  4. * @author monkey
  5. * @desc 请求数据解密
  6. * @date 2018/10/25 20:17
  7. */
  8. @Target({ElementType.METHOD,ElementType.TYPE})
  9. @Retention(RetentionPolicy.RUNTIME)
  10. @Mapping
  11. @Documented
  12. public @interface SecurityParameter {
  13. /**
  14. * 入参是否解密,默认解密
  15. */
  16. boolean inDecode() default true;
  17. /**
  18. * 出参是否加密,默认加密
  19. */
  20. boolean outEncode() default true;
  21. }
  1. import org.springframework.core.annotation.AliasFor;
  2. import org.springframework.web.bind.annotation.ValueConstants;
  3. import java.lang.annotation.*;
  4. /**
  5. * @author monkey
  6. * @desc 请求数据解密
  7. * @date 2018/10/25 20:17
  8. */
  9. @Target(ElementType.PARAMETER)
  10. @Retention(RetentionPolicy.RUNTIME)
  11. @Documented
  12. public @interface RequestParam {
  13. /**
  14. * Alias for {@link #name}.
  15. */
  16. @AliasFor("name")
  17. String value() default "";
  18. /**
  19. * The name of the request parameter to bind to.
  20. * @since 4.2
  21. */
  22. @AliasFor("value")
  23. String name() default "";
  24. boolean required() default true;
  25. String defaultValue() default ValueConstants.DEFAULT_NONE;
  26. }

第三步:

 

  1. import com.alibaba.fastjson.JSON;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.google.gson.Gson;
  4. import com.google.gson.reflect.TypeToken;
  5. import com.monkey.springboot.demo.annotation.RequestParam;
  6. import com.monkey.springboot.demo.annotation.SecurityParameter;
  7. import com.monkey.springboot.demo.utils.AesEncryptUtils;
  8. import com.monkey.springboot.demo.utils.RSAUtils;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.springframework.core.MethodParameter;
  11. import org.springframework.web.bind.support.Web
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/550862
推荐阅读
相关标签
  

闽ICP备14008679号