Я начал изучать Java немного назад, и я работаю над веб-API, используя Spring Boot. Я хочу войти в систему запрос, используя фильтр, который сохраняет журналы в базе данных. Вы можете создавать карты и размещать файлы в карты, вы также можете положить карты в карты. Но когда я пытаюсь войти в систему, когда пользователь загружает файл, мне нужен фильтр, чтобы распознать, что запрос, как MultipartFile, чтобы я мог изменить контент, чтобы журнал не загружал фактическое содержимое файла, а не некоторую информацию о файле .
Это мой фильтр. < /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 в многократный When i try to cast it, it casts an exception saying
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 и org.springframework.web.multipart.multiparthttpservletRequest I в Unnyade of Loader 'App'). >if (request instanceof MultipartHttpServletRequest multipartRequest) {
return extractFileMetadata(multipartRequest);
}
< /code>
Но это тоже не работает. Кто -нибудь знает, как я могу решить эту проблему?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... letrequest
Преобразовать httpservletrequest в многопользовательский ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1738254192
Anonymous
Я начал изучать Java немного назад, и я работаю над веб-API, используя Spring Boot. Я хочу войти в систему запрос, используя фильтр, который сохраняет журналы в базе данных. Вы можете создавать карты и размещать файлы в карты, вы также можете положить карты в карты. Но когда я пытаюсь войти в систему, когда пользователь загружает файл, мне нужен фильтр, чтобы распознать, что запрос, как MultipartFile, чтобы я мог изменить контент, чтобы журнал не загружал фактическое содержимое файла, а не некоторую информацию о файле .
Это мой фильтр. < /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 в многократный When i try to cast it, it casts an exception saying
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 и org.springframework.web.multipart.multiparthttpservletRequest I в Unnyade of Loader 'App'). >if (request instanceof MultipartHttpServletRequest multipartRequest) {
return extractFileMetadata(multipartRequest);
}
< /code>
Но это тоже не работает. Кто -нибудь знает, как я могу решить эту проблему?>
Подробнее здесь: [url]https://stackoverflow.com/questions/79400547/convert-httpservletrequest-into-a-multiparthttpservletrequest[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия