Skip to content

Commit d5804c7

Browse files
committed
添加密码脱敏
1 parent bf10d24 commit d5804c7

File tree

1 file changed

+49
-9
lines changed

1 file changed

+49
-9
lines changed

spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/audit/ResultfulOpRecordAspect.java

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
import cn.springcloud.gray.server.module.user.UserModule;
55
import cn.springcloud.gray.server.resources.domain.ApiRes;
66
import cn.springcloud.gray.utils.WebUtils;
7-
import com.fasterxml.jackson.core.JsonProcessingException;
7+
import com.fasterxml.jackson.core.type.TypeReference;
88
import com.fasterxml.jackson.databind.ObjectMapper;
9+
import org.apache.commons.collections.CollectionUtils;
910
import org.apache.commons.lang3.ArrayUtils;
1011
import org.apache.commons.lang3.StringUtils;
1112
import org.aspectj.lang.JoinPoint;
@@ -24,7 +25,8 @@
2425
import org.springframework.web.context.request.ServletRequestAttributes;
2526

2627
import javax.servlet.http.HttpServletRequest;
27-
import java.util.Date;
28+
import java.io.IOException;
29+
import java.util.*;
2830

2931
@Aspect
3032
public class ResultfulOpRecordAspect {
@@ -41,7 +43,10 @@ public ResultfulOpRecordAspect(ObjectMapper objectMapper, UserModule userModule,
4143
this.operateAuditModule = operateAuditModule;
4244
}
4345

44-
@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping))")
46+
@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping) " +
47+
"|| @annotation(org.springframework.web.bind.annotation.PostMapping)" +
48+
"|| @annotation(org.springframework.web.bind.annotation.DeleteMapping)" +
49+
"|| @annotation(org.springframework.web.bind.annotation.PutMapping))")
4550
public void pointcut() {
4651
}
4752

@@ -72,8 +77,9 @@ public void doAfter(JoinPoint joinPoint, Object result) {
7277
// }
7378
// }
7479
try {
75-
operateRecord.setHeadlerArgs(objectMapper.writeValueAsString(joinPoint.getArgs()));
76-
} catch (JsonProcessingException e) {
80+
String HeadlerArgs = desensitizationArgs(request, joinPoint.getArgs());
81+
operateRecord.setHeadlerArgs(objectMapper.writeValueAsString(HeadlerArgs));
82+
} catch (Exception e) {
7783
log.warn(e.getMessage(), e);
7884
}
7985
if (result instanceof ApiRes) {
@@ -86,21 +92,55 @@ public void doAfter(JoinPoint joinPoint, Object result) {
8692
operateAuditModule.recordOperate(operateRecord);
8793
}
8894

95+
private Set<String> desensitizationUris = new HashSet<>(
96+
Arrays.asList("/gray/user/", "/gray/user/login", "/gray/user/resetPassword", "/gray/user/updatePassword"));
97+
98+
99+
private String[] desensitizationFields = new String[]{"password","oldPassword","newPassword"};
100+
101+
private String desensitizationArgs(HttpServletRequest request, Object[] args) throws IOException {
102+
if (desensitizationUris.contains(request.getRequestURI())) {
103+
List<Map<String, Object>> list = objectMapper.readValue(objectMapper.writeValueAsString(args), new TypeReference<List<Map<String, Object>>>(){});
104+
if(CollectionUtils.isNotEmpty(list)){
105+
Map<String, Object> map = list.get(0);
106+
Object v;
107+
for (String field : desensitizationFields){
108+
v = map.get(field);
109+
if(!Objects.isNull(v)){
110+
map.put(field, convertDesensitization(v.toString()));
111+
}
112+
}
113+
114+
}
115+
return objectMapper.writeValueAsString(list);
116+
}
117+
return objectMapper.writeValueAsString(args);
118+
}
119+
120+
121+
private String convertDesensitization(String str){
122+
StringBuilder sb = new StringBuilder();
123+
for(int i=0, l=str.length(); i<l;i++){
124+
sb.append('*');
125+
}
126+
return sb.toString();
127+
}
128+
89129

90130
private boolean isSholdRecord(RequestMapping requestMapping) {
91-
if(requestMapping==null){
131+
if (requestMapping == null) {
92132
return false;
93133
}
94134
return isSholdRecord(requestMapping.method()) && sholdFromRequest();
95135
}
96136

97-
private RequestMapping getRequestMapping(JoinPoint joinPoint){
137+
private RequestMapping getRequestMapping(JoinPoint joinPoint) {
98138
if (joinPoint.getSignature() instanceof MethodSignature) {
99139
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
100140
RequestMapping requestMapping = AnnotationUtils.findAnnotation(signature.getMethod(), RequestMapping.class);
101-
if(requestMapping==null){
141+
if (requestMapping == null) {
102142
return AnnotationUtils.findAnnotation(joinPoint.getTarget().getClass(), RequestMapping.class);
103-
}else{
143+
} else {
104144
return requestMapping;
105145
}
106146
}

0 commit comments

Comments
 (0)