Commit 60aca3dc authored by 以墨为白's avatar 以墨为白 🎧

优化

parent 5bea093f
package com.zksy.szpt.aspect;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zksy.szpt.domain.CommonRequestDTO;
import com.zksy.szpt.util.EncryptUtil;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.core.MethodParameter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdvice;
import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
@RestControllerAdvice(basePackages = "com.zksy.szpt.controller")
@ConditionalOnBean(name = "signatureVerificationFilter2")
public class RequestBodyAnalysis implements RequestBodyAdvice {
@Resource
private ObjectMapper objectMapper;
@Override
public boolean supports(MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {
return methodParameter.hasParameterAnnotation(RequestBody.class);
}
@Override
public HttpInputMessage beforeBodyRead(HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) throws IOException {
return new HttpInputMessage() {
@Override
public HttpHeaders getHeaders() {
return httpInputMessage.getHeaders();
}
@Override
public InputStream getBody() throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(httpInputMessage.getBody(), baos);
CommonRequestDTO commonRequestDTO = objectMapper.readValue(new String(baos.toByteArray(), StandardCharsets.UTF_8), CommonRequestDTO.class);
String content = EncryptUtil.getInstance().AESDecode(commonRequestDTO.getContent(), "c81e728d9d4c2f636f067f89cc14862c");
return new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
}
};
}
@Override
public Object afterBodyRead(Object o, HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {
return o;
}
@Override
public Object handleEmptyBody(Object o, HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {
return o;
}
}
...@@ -2,6 +2,7 @@ package com.zksy.szpt.config; ...@@ -2,6 +2,7 @@ package com.zksy.szpt.config;
import com.zksy.szpt.filter.SignatureVerificationFilter; import com.zksy.szpt.filter.SignatureVerificationFilter;
import com.zksy.szpt.filter.SignatureVerificationFilter1; import com.zksy.szpt.filter.SignatureVerificationFilter1;
import com.zksy.szpt.filter.SignatureVerificationFilter2;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
...@@ -79,4 +80,16 @@ public class WebConfig implements WebMvcConfigurer { ...@@ -79,4 +80,16 @@ public class WebConfig implements WebMvcConfigurer {
return filterRegistrationBean; return filterRegistrationBean;
} }
@Bean
@ConditionalOnBean(name = "signatureVerificationFilter2")
public FilterRegistrationBean getFilter1Registration(@Qualifier("signatureVerificationFilter2") SignatureVerificationFilter2 signatureVerificationFilter) {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(signatureVerificationFilter);
//设置过滤器名称和路径,在过滤器类写了的话,这里不用重复写
filterRegistrationBean.setName("filter");
filterRegistrationBean.addUrlPatterns("/rest/*");
//设置过滤器执行顺序,数字越小,越早进行过滤,也可设置为负数
filterRegistrationBean.setOrder(1);
return filterRegistrationBean;
}
} }
...@@ -6,9 +6,6 @@ public class CurrentUserInfo { ...@@ -6,9 +6,6 @@ public class CurrentUserInfo {
private String deptCode; private String deptCode;
private String ip; private String ip;
public CurrentUserInfo() {
}
private CurrentUserInfo(CurrentUserInfoBuilder builder) { private CurrentUserInfo(CurrentUserInfoBuilder builder) {
this.userId = builder.userId; this.userId = builder.userId;
this.userName = builder.userName; this.userName = builder.userName;
......
...@@ -174,9 +174,5 @@ public class SignatureVerificationFilter extends OncePerRequestFilter { ...@@ -174,9 +174,5 @@ public class SignatureVerificationFilter extends OncePerRequestFilter {
CurrentUserInfo currentUserInfo = new CurrentUserInfo.CurrentUserInfoBuilder().userId(userId).userName(userId).ip(ip).build(); CurrentUserInfo currentUserInfo = new CurrentUserInfo.CurrentUserInfoBuilder().userId(userId).userName(userId).ip(ip).build();
UserContextHolder.set(currentUserInfo); UserContextHolder.set(currentUserInfo);
} }
private void checkDeptCode(String deptCode, AppStore appStore) {
}
} }
...@@ -18,8 +18,6 @@ import org.slf4j.Logger; ...@@ -18,8 +18,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.util.StreamUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.filter.OncePerRequestFilter;
...@@ -31,8 +29,6 @@ import javax.servlet.http.HttpServletResponse; ...@@ -31,8 +29,6 @@ import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -173,11 +169,5 @@ public class SignatureVerificationFilter1 extends OncePerRequestFilter { ...@@ -173,11 +169,5 @@ public class SignatureVerificationFilter1 extends OncePerRequestFilter {
CurrentUserInfo currentUserInfo = new CurrentUserInfo.CurrentUserInfoBuilder().userId(userId).userName(userId).ip(ip).build(); CurrentUserInfo currentUserInfo = new CurrentUserInfo.CurrentUserInfoBuilder().userId(userId).userName(userId).ip(ip).build();
UserContextHolder.set(currentUserInfo); UserContextHolder.set(currentUserInfo);
} }
private String getRequestBody(HttpServletRequest request) throws IOException {
try (BufferedReader reader = request.getReader()) {
return reader.lines().collect(Collectors.joining(System.lineSeparator()));
}
}
} }
...@@ -10,7 +10,6 @@ import com.zksy.szpt.domain.HttpResult; ...@@ -10,7 +10,6 @@ import com.zksy.szpt.domain.HttpResult;
import com.zksy.szpt.domain.HttpResultState; import com.zksy.szpt.domain.HttpResultState;
import com.zksy.szpt.domain.po.AppStore; import com.zksy.szpt.domain.po.AppStore;
import com.zksy.szpt.service.AppStoreService; import com.zksy.szpt.service.AppStoreService;
import com.zksy.szpt.util.EncryptUtil;
import com.zksy.szpt.util.RedisKeyValidator; import com.zksy.szpt.util.RedisKeyValidator;
import com.zksy.szpt.util.SignatureUtil; import com.zksy.szpt.util.SignatureUtil;
import com.zksy.szpt.util.UserContextHolder; import com.zksy.szpt.util.UserContextHolder;
...@@ -18,6 +17,7 @@ import org.slf4j.Logger; ...@@ -18,6 +17,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.filter.OncePerRequestFilter;
...@@ -26,17 +26,15 @@ import javax.servlet.FilterChain; ...@@ -26,17 +26,15 @@ import javax.servlet.FilterChain;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/** /**
* 请求body { appkey , method , hotelCode , content(根据密钥[md5]对dto的json加密aes), sign(前面的参数一起哈希运算)} 。 无其他参数 * 请求body { appkey , method , hotelCode , content(根据密钥[md5]对dto的json加密aes), sign(前面的参数一起哈希运算)} 。 无其他参数
* 请求数据直接转发到后端服务 * 请求数据直接转发到后端服务,用requestbodyanalysis进行解密
*/ */
//@Component(value = "signatureVerificationFilter1") //@Component(value = "signatureVerificationFilter2")
public class SignatureVerificationFilter2 extends OncePerRequestFilter { public class SignatureVerificationFilter2 extends OncePerRequestFilter {
public Logger logger = LoggerFactory.getLogger(SignatureVerificationFilter2.class); public Logger logger = LoggerFactory.getLogger(SignatureVerificationFilter2.class);
...@@ -64,6 +62,7 @@ public class SignatureVerificationFilter2 extends OncePerRequestFilter { ...@@ -64,6 +62,7 @@ public class SignatureVerificationFilter2 extends OncePerRequestFilter {
if (result != null) { if (result != null) {
this.write(response, result); this.write(response, result);
} else { } else {
addUserInfo(request);
filterChain.doFilter(requestWrapper, response); filterChain.doFilter(requestWrapper, response);
} }
} }
...@@ -152,5 +151,18 @@ public class SignatureVerificationFilter2 extends OncePerRequestFilter { ...@@ -152,5 +151,18 @@ public class SignatureVerificationFilter2 extends OncePerRequestFilter {
response.setCharacterEncoding(StandardCharsets.UTF_8.name()); response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.getWriter().write(JSONUtil.toJsonStr(httpResult)); response.getWriter().write(JSONUtil.toJsonStr(httpResult));
} }
/**
* 增加用户信息
*
* @param request
*/
private void addUserInfo(HttpServletRequest request) {
// 增加用户信息
String userId = request.getHeader(SignatureUtil.APPID);
String ip = request.getRemoteAddr();
CurrentUserInfo currentUserInfo = new CurrentUserInfo.CurrentUserInfoBuilder().userId(userId).userName(userId).ip(ip).build();
UserContextHolder.set(currentUserInfo);
}
} }
...@@ -17,6 +17,8 @@ import java.util.List; ...@@ -17,6 +17,8 @@ import java.util.List;
*/ */
@Component @Component
public class SzptMetaObjectHandler implements MetaObjectHandler { public class SzptMetaObjectHandler implements MetaObjectHandler {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(SzptMetaObjectHandler.class);
@Override @Override
public void insertFill(MetaObject metaObject) { public void insertFill(MetaObject metaObject) {
// 新增时自动填充 create_time, update_time 字段 // 新增时自动填充 create_time, update_time 字段
...@@ -24,6 +26,10 @@ public class SzptMetaObjectHandler implements MetaObjectHandler { ...@@ -24,6 +26,10 @@ public class SzptMetaObjectHandler implements MetaObjectHandler {
// this.strictInsertFill(metaObject, "cjsj", Date.class, new Date()); // this.strictInsertFill(metaObject, "cjsj", Date.class, new Date());
CurrentUserInfo currentUserInfo = UserContextHolder.get(); CurrentUserInfo currentUserInfo = UserContextHolder.get();
if (currentUserInfo == null) {
log.error("当前用户信息为空,无法自动填充 create_time, update_time 字段");
}
List<StrictFill> fields = Arrays.asList( List<StrictFill> fields = Arrays.asList(
StrictFill.of("createTime", Date.class, new Date()), StrictFill.of("createTime", Date.class, new Date()),
StrictFill.of("cjsj", Date.class, new Date()), StrictFill.of("cjsj", Date.class, new Date()),
...@@ -51,6 +57,9 @@ public class SzptMetaObjectHandler implements MetaObjectHandler { ...@@ -51,6 +57,9 @@ public class SzptMetaObjectHandler implements MetaObjectHandler {
@Override @Override
public void updateFill(MetaObject metaObject) { public void updateFill(MetaObject metaObject) {
CurrentUserInfo currentUserInfo = UserContextHolder.get(); CurrentUserInfo currentUserInfo = UserContextHolder.get();
if (currentUserInfo == null) {
log.error("当前用户信息为空,无法自动填充 update_time 字段");
}
List<StrictFill> fields = Arrays.asList( List<StrictFill> fields = Arrays.asList(
StrictFill.of("updateTime", Date.class, new Date()), StrictFill.of("updateTime", Date.class, new Date()),
StrictFill.of("gxrid", String.class, "1"), StrictFill.of("gxrid", String.class, "1"),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment