当前位置:   article > 正文

Java 对部分接口返回数据进行加密,或其他处理

Java 对部分接口返回数据进行加密,或其他处理

业务场景:后端项目中分为PC端和移动端接口,移动端为例如 mobile 开头的URl,需求为调用移动端接口时,对返回数据进行加密,PC端不加密

  1. import cn.hutool.core.date.DatePattern;
  2. import cn.hutool.json.JSONConfig;
  3. import cn.hutool.json.JSONObject;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.core.MethodParameter;
  7. import org.springframework.http.MediaType;
  8. import org.springframework.http.server.ServerHttpRequest;
  9. import org.springframework.http.server.ServerHttpResponse;
  10. import org.springframework.web.bind.annotation.ControllerAdvice;
  11. import org.springframework.web.context.request.RequestAttributes;
  12. import org.springframework.web.context.request.RequestContextHolder;
  13. import org.springframework.web.context.request.ServletRequestAttributes;
  14. import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
  15. import javax.servlet.http.HttpServletRequest;
  16. import java.util.ArrayList;
  17. import java.util.HashMap;
  18. import java.util.List;
  19. import java.util.Map;
  20. @Slf4j
  21. @ControllerAdvice
  22. public class ResultEncipher implements ResponseBodyAdvice {
  23. @Override
  24. public boolean supports(MethodParameter methodParameter, Class aClass) {
  25. return true;
  26. }
  27. @Override
  28. public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
  29. RequestAttributes ra = RequestContextHolder.getRequestAttributes();
  30. ServletRequestAttributes sra = (ServletRequestAttributes) ra;
  31. HttpServletRequest httpServletRequest = sra.getRequest();
  32. String url = httpServletRequest.getRequestURL().toString();
  33. log.info("------------------------------------------------------");
  34. log.info(url);
  35. log.info("------------------------------------------------------");
  36. JSONConfig jsonConfig = new JSONConfig();
  37. jsonConfig.setDateFormat(DatePattern.NORM_DATETIME_PATTERN);
  38. JSONObject jsonObject = new JSONObject(body, jsonConfig);
  39. String request = jsonObject.toString();
  40. List<String> requestList = new ArrayList<>();
  41. try {
  42. if (url.contains("phones")) {
  43. log.info("phones URL 开始加密");
  44. ObjectMapper objectMapper = new ObjectMapper();
  45. String result = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(body);
  46. log.info(result);
  47. String point = "xxx";
  48. //生成公钥和私钥
  49. Map<String, String> keyMap = new HashMap<>();//genKeyPair();
  50. keyMap.put("publicKey", "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOUDwJVY1JMY4oSHM1+VKeYZ5T2LjQ4wvENnt0TlRoOYDrUen4Nm3GbVKiGTot76gu7xYL1X9PQvDnYLpUVu0mA2oLrXWZj2ByTW83Ehdc5Y9aLXtNzmm4e6PXtuEtXk2sqUZz+XtBBAUMAne4J9G9DAZVPLFxUUJyzVb9cnK6NQIDAQAB");
  51. keyMap.put("privateKey", "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM5QPAlVjUkxjihIczX5Up5hnlPYuNDjC8Q2e3ROVGg5gOtR6fg2bcZtUqIZOi3vqC7vFgvVf09C8OdgulRW7SYDagutdZmPYHJNbzcSF1zlj1ote03Oabh7o9e24S1eTaypRnP5e0EEBQwCd7gn0b0MBlU8sXFRQnLNVv1ycro1AgMBAAECgYAKkJlCcRsXEG6TKYKc1POiIKWW7ZYpPDcyCQgxYIF6BNfRNRSiHUdpzddZbalJCOi33o5mdLxcNrVXY+CmyPzDyeyNWWX8UcL2Wud8vRlWU7kQ+YcCVyS/nqRLBpHb0QgW7bqzb7fRpnmqhfj+A9hzRaoKxsZ8EWQfvN5UcdmQgQJBAPyTXzHcicK6gsgaXVo8awXsKxT6/bVAq7+FO/F4ckflS3oyABFNnqVRTC3nuQsU6nq3fu1kDwa03NcAa5zZaykCQQDRHEw4N0pnGKdecKTjBlD95B9WI0KCMWHpSOTIZJUIEvKXANX5BFaGHY01BNxDmwVcuecHgG2XH/WyIzVeJEQtAkEA8WM/NX4aQvrRhsB7u4PGnPBq9DA0TQeznOSOt2ZvgfrIOc6TdfYCyuh5r92oYcjpl8LLEcHxAm3UKb8DGfJIkQJAAjyYQB2vSQ0FdUglK1x870pKX4R/CJ94maMy90XEJlL1j1Ht9/zo5ARa509G/94fn49JflYMVgp8eUxRHNGsfQJBAKm39ZUaFyuDSpRINHZNHfldasmy9hLyXdTb3sLFj/bPaq0MyORAZPqq6XCu+nnIhVKVyADbXb+8T5kn70lzIbg=");
  52. String publicKey = keyMap.get("publicKey");
  53. String privateKey = keyMap.get("privateKey");
  54. System.out.println(publicKey);
  55. System.out.println(privateKey);
  56. log.info("后端返回参数:" + request);
  57. requestList = RSAEncrypt.publicKeyEncryptBigStr(request, publicKey, point);
  58. } else {
  59. return body;
  60. }
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. log.error("对方法method :【" + methodParameter.getMethod().getName() + "】返回数据进行解密出现异常:" + e.getMessage());
  64. return requestList;
  65. }
  66. return requestList;
  67. }
  68. }

加密相关在以下博文,复制即可使用

RSA 加密解密,中文不乱码-CSDN博客文章浏览阅读520次,点赞14次,收藏6次。RSA 加密 ,解密, 解决中文乱码,解决加密数据过长问题,循环加密,及中文乱码分析https://blog.csdn.net/qq_37739437/article/details/135741460?spm=1001.2014.3001.5501

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/53176
推荐阅读
相关标签
  

闽ICP备14008679号