vue接口的返回结果自动调用aes解密

本文介绍了如何在Vue应用中使用Axios拦截器处理接口返回的AES加密数据,通过decryptData函数解密,然后在组件中直接使用解密后的数据。关键步骤包括安装Axios和CryptoJS,创建解密函数以及设置Axios拦截器。

要在 Vue 中实现接口返回结果自动调用 AES 解密,你可以使用 Axios 拦截器(interceptor)来处理接口的响应。

首先,确保你已经安装了 Axios:

npm install axios

然后,在你的 Vue 项目中创建一个拦截器文件(例如 interceptor.js),并编写以下代码:

import axios from 'axios';
import CryptoJS from 'crypto-js';

// 创建一个 AES 解密函数
function decryptData(encryptedData, key, iv) {
  const decrypted = CryptoJS.AES.decrypt(encryptedData, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7,
  });
  return decrypted.toString(CryptoJS.enc.Utf8);
}

// 创建 Axios 拦截器
axios.interceptors.response.use(
  function (response) {
    // 获取接口返回的加密数据
    const encryptedData = response.data;

    // 解密数据
    const decryptedData = decryptData(encryptedData, '密钥', '初始化向量');

    // 将解密后的数据替换原始响应数据
    response.data = JSON.parse(decryptedData);

    return response;
  },
  function (error) {
    return Promise.reject(error);
  }
);

export default axios;

在上面的代码中,我们创建了一个 decryptData 函数,用于解密数据。然后,我们使用 Axios 的拦截器,在每次接口响应返回时自动调用该函数进行解密。

请确保将 '密钥' 和 '初始化向量' 替换为你实际使用的值。

使用拦截器后,你可以在你的 Vue 组件中直接使用这个经过拦截器处理的 Axios 实例来发送请求。例如:

import axios from './interceptor';

export default {
  methods: {
    fetchData() {
      axios.get('/api/data')
        .then(response => {
          // 在这里处理解密后的响应数据
          const decryptedData = response.data;
          console.log('解密后的数据:', decryptedData);
        })
        .catch(error => {
          console.error(error);
        });
    },
  },
};

在上面的示例中,我们通过 axios.get 发送 GET 请求,并在 then 方法中处理解密后的响应数据。

这样,当接口返回加密的数据时,拦截器会自动解密数据,并将解密后的数据替换原始响应数据,使你可以直接使用解密后的数据进行后续操作。

在 Vue 项目中,你可以将 interceptor.js 文件放置在 src 目录下的任何位置。通常,可以将拦截器文件放在 src/utils 目录下或者创建一个新的 src/interceptors 目录来存放拦截器相关的文件。

以下是一个示例项目结构:

- src
  - assets
  - components
  - router
  - store
  - utils
    - interceptor.js
  - views
  - App.vue
  - main.js

在该示例中,interceptor.js 文件被放置在 src/utils 目录下。你可以根据自己的项目结构和组织方式来决定最适合的位置。

确保在使用拦截器之前,在你的 Vue 组件或入口文件(如 main.js)中引入拦截器文件,以确保拦截器能够生效。

例如,在 main.js 中引入拦截器文件:

import Vue from 'vue';
import App from './App.vue';
import axios from './utils/interceptor';

Vue.prototype.$http = axios;

new Vue({
  render: h => h(App),
}).$mount('#app');

这样,拦截器文件将在应用程序启动时被加载,并且在整个应用程序中生效。

请根据你的项目结构和需求,选择合适的位置来放置拦截器文件。

### 实现接口参数 AES 加密解密的方法 在 Ruoyi-Vue-Plus 项目中,为了保障数据的安全性和隐私性,在接口通信过程中对接口参数进行加密和解密是非常重要的。通过集成 Hutool 的 AES 工具类可以方便地完成这一功能。 #### 自定义注解与拦截器 对于需要加密处理的数据字段,可以通过自定义注解 `@EncryptField` 来标注这些字段[^2]。接着创建两个 MyBatis Plus 拦截器——`MybatisEncryptInterceptor` 和 `MybatisDecryptInterceptor` 分别负责入参的加密操作以及出参的结果解密工作。当执行插入或者更新操作时会触发加密逻辑;而读取记录的时候则启动相应的解密流程[^1]。 ```java // 定义加密注解 public @interface EncryptField { AlgorithmType value(); } // 入参加密拦截器 @Component @Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})}) public class MybatisEncryptInterceptor implements Interceptor { private final IEncryptor encryptor; public MybatisEncryptInterceptor(IEncryptor encryptor) { this.encryptor = encryptor; } @Override public Object intercept(Invocation invocation) throws Throwable { // 获取待加密对象并遍历其所有属性查找带有 @EncryptField 注解的成员变量... return null; // 返回加密后的实体对象给 mybatis 执行 sql } } ``` #### 抽象加密器实现 继承于 `AbstractEncryptor` 类来具体化不同的加密策略,比如这里采用的是 AES 对称加密方式。此类接收上下文环境作为构造函数参数以便获取必要的配置项,并提供统一入口供外部调用加密/解密服务[^3]。 ```java public abstract class AbstractEncryptor implements IEncryptor { protected final EncryptContext context; public AbstractEncryptor(EncryptContext context) { this.context = Objects.requireNonNull(context); validateConfigurations(); // 校验用户输入的有效性 } /** * 提供给子类覆写的模板方法模式下的钩子函数, */ protected void doInitialize() {} /** * 子类需覆盖此方法以指定具体的加密行为。 * * @param data 待加密的内容字符串形式表示 * @return 经过编码转换之后得到的目标字节数组 */ protected byte[] encode(String data); /** * 解码已编码过的字节流恢复原始文本信息。 * * @param encodedData 被编码后的二进制序列 * @return 还原出来的明文字串表达式 */ protected String decode(byte[] encodedData); ... } ``` #### 应用层配置 最后一步是在应用程序层面设置好相关组件和服务,确保整个加解密机制能够正常运作起来。这涉及到修改 Spring Boot 配置文件 (`application.yml`) 添加必要选项,编写对应的 Java Config 文件注册 Bean 实例等操作[^4]。 ```yaml encrypt: aes-key: your-secret-aes-key # 设置aes秘钥 ``` ```java @Configuration @EnableConfigurationProperties(ApiDecryptProperties.class) public class ApiDecryptAutoConfiguration { @Bean public CryptoFilter cryptoFilter(@Autowired(required=false) DecryptRequestBodyWrapper decrypter){ return new CryptoFilter(decrypter); } ... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值