文件加解密修改

This commit is contained in:
梁琦涛
2024-02-28 18:24:02 +08:00
parent 45da688213
commit dc1a67df74
2 changed files with 89 additions and 4 deletions
@@ -0,0 +1,87 @@
package com.jero.modules.docking.download.config;
import org.apache.commons.io.IOUtils;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.ContentCachingRequestWrapper;
import org.springframework.web.util.ContentCachingResponseWrapper;
import org.springframework.web.util.WebUtils;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
/**
* @author lqt
* @version 1.0
* @date 2023/11/24 11:36
*/
@Component
public class ContentCachingWrapperFilter extends OncePerRequestFilter implements Ordered {
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE - 10;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// 包装流,可重复读取
if (!(request instanceof ContentCachingRequestWrapper)) {
request = new ContentCachingRequestWrapper(request);
}
if (!(response instanceof ContentCachingResponseWrapper)) {
response = new ContentCachingResponseWrapper(response);
}
filterChain.doFilter(request, response);
updateResponse(response);
}
/**
* 更新响应(不操作这一步,会导致接口响应空白)
*
* @param response 响应对象
* @throws IOException /
*/
public static void updateResponse(HttpServletResponse response) throws IOException {
ContentCachingResponseWrapper responseWrapper = WebUtils.getNativeResponse(response, ContentCachingResponseWrapper.class);
Objects.requireNonNull(responseWrapper).copyBodyToResponse();
}
/**
* 获取请求体
*
* @param request 请求对象
* @return 请求体
*/
public static String getRequestBody(HttpServletRequest request) throws IOException {
String requestBody = "";
ContentCachingRequestWrapper wrapper = WebUtils.getNativeRequest(request, ContentCachingRequestWrapper.class);
if (wrapper != null) {
requestBody = IOUtils.toString(wrapper.getContentAsByteArray(), StandardCharsets.UTF_8.toString());
}
return requestBody;
}
/**
* 获取响应体
*
* @param response 响应对象
* @return 响应体
*/
public static InputStream getResponseBody(HttpServletResponse response) throws IOException {
InputStream responseBody = null;
ContentCachingResponseWrapper wrapper = WebUtils.getNativeResponse(response, ContentCachingResponseWrapper.class);
if (wrapper != null) {
responseBody = wrapper.getContentInputStream();
}
return responseBody;
}
}
@@ -3,6 +3,7 @@ package com.jero.modules.docking.download.service.impl;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.docking.download.config.ContentCachingWrapperFilter;
import com.jero.modules.docking.download.service.DownloadDecryptFileService;
import com.jero.modules.docking.utils.IntekeyUtils;
import lombok.SneakyThrows;
@@ -112,10 +113,7 @@ public class DownloadDecryptFileServiceImpl implements DownloadDecryptFileServic
if(Objects.equals(returnType,"void") && !Objects.equals(type,"1")){
return;
}
ContentCachingResponseWrapper wrapper = WebUtils.getNativeResponse(response, ContentCachingResponseWrapper.class);
if (wrapper != null) {
responseBody = wrapper.getContentInputStream();
}
responseBody = ContentCachingWrapperFilter.getResponseBody(response);
} catch (Exception e) {
e.printStackTrace();
response.setStatus(404);