Это мой фильтр. < /p>
Код: Выделить всё
@Component
@RequiredArgsConstructor
public class ActivityLogFilter extends OncePerRequestFilter {
private final ActivityLogRepository activityLogRepository;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(request);
ContentCachingResponseWrapper wrappedResponse = new ContentCachingResponseWrapper(response);
filterChain.doFilter(wrappedRequest, wrappedResponse);
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String username = (authentication != null && authentication.isAuthenticated()) ? authentication.getName() : "Anonymous";
String method = request.getMethod();
String endpoint = request.getRequestURI();
int statusCode = response.getStatus();
String requestBody = processRequestBody(wrappedRequest);
String responseBody = processResponseBody(wrappedResponse);
ActivityLog log = new ActivityLog();
log.setUsername(username);
log.setMethod(method);
log.setEndpoint(endpoint);
log.setStatusCode(statusCode);
//log.setRequestBody(requestBody);
//log.setResponseBody(responseBody);
activityLogRepository.save(log);
wrappedResponse.copyBodyToResponse();
}
private String processRequestBody(HttpServletRequest request) {
ContentCachingRequestWrapper wrapper = (ContentCachingRequestWrapper) request;
byte[] buf = wrapper.getContentAsByteArray();
String body = (buf.length > 0) ? new String(buf, StandardCharsets.UTF_8) : "";
return maskSensitiveData(body);
}
private String processResponseBody(ContentCachingResponseWrapper response) {
byte[] buf = response.getContentAsByteArray();
return (buf.length > 0) ? new String(buf, StandardCharsets.UTF_8) : "";
}
private String maskSensitiveData(String requestBody) {
if (requestBody.contains("password")) {
requestBody = requestBody.replaceAll("\"password\":\"[^\"]+\"", "\"password\":\"****\"");
}
if (requestBody.contains("token")) {
requestBody = requestBody.replaceAll("\"token\":\"[^\"]+\"", "\"token\":\"****\"");
}
return requestBody;
}
}
< /code>
Этот код в настоящее время не пытается получить запрос, потому что я никогда не заставлял его работать, но как я могу преобразовать httpservlectrequest в многократный Когда я пытаюсь разыграть, он произносит исключение, говоря, что < /p>
class org.springframework.security.web.servletapi.HttpServlet3RequestFactory$Servlet3SecurityContextHolderAwareRequestWrapper cannot be cast to class org.springframework.web.multipart.MultipartHttpServletRequest (org.springframework.security.web.servletapi.HttpServlet3RequestFactory$Servlet3SecurityContextHolderAwareRequestWrapper and org.springframework.web.multipart.MultipartHttpServletRequest are in unnamed module of loader 'app').Я также попробовал
if (request instanceof MultipartHttpServletRequest multipartRequest) {
return extractFileMetadata(multipartRequest);
}
< /code>
Но это тоже не работает. Кто -нибудь знает, как я могу решить эту проблему?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... letrequest
Мобильная версия