• 若依系统富文本框上传图片报错!


     报错如下:

     原因:如图,富文本路径中存在 / 字符,导致上传出错。

     解决方案:将富文本框内容在前端进行加密,后端再解密。

    前端:

    安装 crypto-js 插件

    npm install crypto-js

    创建工具类 :在 src 目录下的  utils  中创建asc.js

    1. import CryptoJS from 'crypto-js'
    2. // 需要和后端一致
    3. const KEY = CryptoJS.enc.Utf8.parse('wenhePiCloudSecre');
    4. const IV = CryptoJS.enc.Utf8.parse('wenhePiCloudSecre');
    5. export default {
    6. /**
    7. * 加密
    8. * @param {*} word
    9. * @param {*} keyStr
    10. * @param {*} ivStr
    11. */
    12. encrypt (word, keyStr, ivStr) {
    13. let key = KEY;
    14. let iv = IV;
    15. if (keyStr) {
    16. key = CryptoJS.enc.Utf8.parse(keyStr);
    17. iv = CryptoJS.enc.Utf8.parse(ivStr);
    18. }
    19. let srcs = CryptoJS.enc.Utf8.parse(word);
    20. var encrypted = CryptoJS.AES.encrypt(srcs, key, {
    21. iv: iv,
    22. mode: CryptoJS.mode.CBC,
    23. padding: CryptoJS.pad.ZeroPadding
    24. });
    25. return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
    26. },
    27. /**
    28. * 解密
    29. * @param {*} word
    30. * @param {*} keyStr
    31. * @param {*} ivStr
    32. */
    33. decrypt (word, keyStr, ivStr) {
    34. let key = KEY;
    35. let iv = IV;
    36. if (keyStr) {
    37. key = CryptoJS.enc.Utf8.parse(keyStr);
    38. iv = CryptoJS.enc.Utf8.parse(ivStr);
    39. }
    40. let base64 = CryptoJS.enc.Base64.parse(word);
    41. let src = CryptoJS.enc.Base64.stringify(base64);
    42. let decrypt = CryptoJS.AES.decrypt(src, key, {
    43. iv: iv,
    44. mode: CryptoJS.mode.CBC,
    45. padding: CryptoJS.pad.ZeroPadding
    46. });
    47. let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    48. return decryptedStr.toString();
    49. }
    50. }

    使用:引入函数,使用函数

    asc.encrypt(data)

    后端:

     maven中引入包:

    1. <groupId>org.bouncycastlegroupId>
    2. <artifactId>bcprov-jdk15onartifactId>
    3. 1.60/version>

    创建工具类:

    1. package com.ruoyi.common.utils;
    2. import org.apache.commons.codec.binary.Base64;
    3. import javax.crypto.Cipher;
    4. import javax.crypto.spec.IvParameterSpec;
    5. import javax.crypto.spec.SecretKeySpec;
    6. /**
    7. * @author root
    8. */
    9. public class SecretUtil {
    10. /***
    11. * key和iv值需要和前端一致
    12. */
    13. public static final String KEY = "wenhePiCloudSecre";
    14. public static final String IV = "wenhePiCloudSecre";
    15. /**
    16. * 加密方法
    17. *
    18. * @param data 要加密的数据
    19. * @param key 加密key
    20. * @param iv 加密iv
    21. * @return 加密的结果
    22. */
    23. public static String encrypt(String data, String key, String iv) {
    24. try {
    25. //"算法/模式/补码方式"NoPadding PkcsPadding
    26. Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
    27. int blockSize = cipher.getBlockSize();
    28. byte[] dataBytes = data.getBytes();
    29. int plaintextLength = dataBytes.length;
    30. if (plaintextLength % blockSize != 0) {
    31. plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
    32. }
    33. byte[] plaintext = new byte[plaintextLength];
    34. System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
    35. SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
    36. IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
    37. cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
    38. byte[] encrypted = cipher.doFinal(plaintext);
    39. return new Base64().encodeToString(encrypted);
    40. } catch (Exception e) {
    41. e.printStackTrace();
    42. return null;
    43. }
    44. }
    45. /**
    46. * 解密方法
    47. *
    48. * @param data 要解密的数据
    49. * @param key 解密key
    50. * @param iv 解密iv
    51. * @return 解密的结果
    52. */
    53. public static String desEncrypt(String data, String key, String iv) {
    54. try {
    55. byte[] encrypted1 = new Base64().decode(data);
    56. Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
    57. SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");
    58. IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
    59. cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
    60. byte[] original = cipher.doFinal(encrypted1);
    61. return new String(original).trim();
    62. } catch (Exception e) {
    63. e.printStackTrace();
    64. return null;
    65. }
    66. }
    67. }

    使用:

     object.setDocContent(SecretUtil.desEncrypt(object.getDocContent(),SecretUtil.KEY,SecretUtil.IV));

    搞定~

  • 相关阅读:
    go-zero 微服务实战系列(一、开篇)
    聊一聊过滤器与拦截器
    spring initializr脚手架搭建详解
    maven-shade-plugin - 解决 Jar 包冲突新思路
    Dubbo使用问题搜集
    【消息队列】MQ 八股文必背
    Python 标准库之pathlib,路径操作
    一文带你认知定时消息发布RocketMQ
    开关电源反激式线圈分析
    谱半径学习
  • 原文地址:https://blog.csdn.net/qq_36978986/article/details/134385274