springboot项目接口加解密_springboot项目 请求接口加密

本文介绍了在SpringBoot项目中实现接口加解密的方法,包括使用`DecryptRequestBodyAdvice`和`DecryptionAnnotation`进行解密,以及`EncryptResponseBodyAdvice`进行加密。文章详细讲解了如何处理请求和响应的加解密过程,确保数据的安全传输。
摘要由CSDN通过智能技术生成

/**

  • 请求流支持多次获取
    */
    public class InputStreamHttpServletRequestWrapper extends HttpServletRequestWrapper {

/**

  • 用于缓存输入流
    */
    private ByteArrayOutputStream cachedBytes;

public InputStreamHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
}

@Override
public ServletInputStream getInputStream() throws IOException {
if (cachedBytes == null) {
// 首次获取流时,将流放入 缓存输入流 中
cacheInputStream();
}

// 从 缓存输入流 中获取流并返回
return new CachedServletInputStream(cachedBytes.toByteArray());
}

@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}

/**

  • 首次获取流时,将流放入 缓存输入流 中
    */
    private void cacheInputStream() throws IOException {
    // 缓存输入流以便多次读取。为了方便, 我使用 org.apache.commons IOUtils
    cachedBytes = new ByteArrayOutputStream();
    IOUtils.copy(super.getInputStream(), cachedBytes);
    }

/**

  • 读取缓存的请求正文的输入流
  • 用于根据 缓存输入流 创建一个可返回的
    */
    public static class CachedServletInputStream extends ServletInputStream {

private final ByteArrayInputStream input;

public CachedServletInputStream(byte[] buf) {
// 从缓存的请求正文创建一个新的输入流
input = new ByteArrayInputStream(buf);
}

@Override
public boolean isFinished() {
return false;
}

@Override
public boolean isReady() {
return false;
}

@Override
public void setReadListener(ReadListener listener) {

}

@Override
public int read() throws IOException {
return input.read();
}
}

}

四、加解密注解

1、DecryptRequestBodyAdvice.java(解密切面)

package com.soft.common.advice;

import cn.hutool.core.io.IoUtil;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.soft.common.annotation.DecryptionAnnotation;
import com.soft.common.constant.CryptoConstant;
import com.soft.common.entity.RequestBase;
import com.soft.common.entity.RequestData;
import com.soft.common.exception.ParamException;
import com.soft.common.util.AESUtil;
import com.soft.entity.User;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.converter.HttpMessageConverter;<

  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值