package com.doumee.config.interfaceencryption;
|
|
import com.doumee.config.annotation.EncryptionReq;
|
import com.doumee.config.annotation.EncryptionResp;
|
import com.doumee.config.interfaceencryption.tool.RSAEncrypt;
|
import com.doumee.core.utils.AESUtils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.lang.Nullable;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.servlet.HandlerInterceptor;
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.util.stream.Collectors;
|
|
/**
|
* app自定义token认证
|
*/
|
@Slf4j
|
//@Component
|
public class InterfaceEncryptionMvcConfig implements WebMvcConfigurer {
|
|
/**
|
* 是否开发者
|
*/
|
@Value("${debug_model}")
|
private Boolean isDebug;
|
/**
|
* 添加拦截器
|
*/
|
@Override
|
public void addInterceptors(InterceptorRegistry registry) {
|
//API接口JwtToken拦截器
|
HandlerInterceptor encrypterceptor = new HandlerInterceptor() {
|
@Override
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
|
@Nullable Exception ex) throws Exception {
|
if (!(handler instanceof HandlerMethod)) {
|
return ;
|
}
|
/* HandlerMethod handlerMethod = (HandlerMethod) handler;
|
if(!( handlerMethod.hasMethodAnnotation(EncryptionResp.class) || handlerMethod.hasMethodAnnotation(EncryptionResp.class)) ){
|
//如果是加密返回参数
|
String str = generateRandomLetters(16);
|
String afterDealStr = newEncrypt(str);
|
ResponseData response = (ResponseData) object;
|
//对响应内容进行加密
|
ObjectMapper objectMapper = new ObjectMapper();
|
String aesEncryptData = AESUtils.encrypt(objectMapper.writeValueAsString(response.getData()), str);
|
response.setData(aesEncryptData);
|
String aesEncryptMessage = AESUtils.encrypt(objectMapper.writeValueAsString(response.getMessage()), str);
|
response.setMessage(aesEncryptMessage + " " + afterDealStr);
|
return object;
|
}*/
|
|
}
|
@Override
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
// 如果不是映射到方法直接通过
|
if (!(handler instanceof HandlerMethod)) {
|
return true;
|
}
|
HandlerMethod handlerMethod = (HandlerMethod) handler;
|
if(( handlerMethod.hasMethodAnnotation(EncryptionResp.class) || handlerMethod.hasMethodAnnotation(EncryptionResp.class)) ){
|
//如果是加密参数
|
String secretKey = request.getHeader("secretKey");
|
//对key进行解密
|
// String decrypt = RSAEncrypt.decrypt(secretKey, RSAEncrypt.privateKey);
|
//获取请求参数
|
String requestBody = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
|
String param = requestBody.toString();
|
//对参数进行解密
|
String decrypt1 = AESUtils.decrypt(param, requestBody);
|
//放入请求
|
request.setAttribute("param", decrypt1);
|
}
|
return true;
|
}
|
};
|
registry.addInterceptor(encrypterceptor).addPathPatterns("/**");
|
}
|
|
|
|
}
|