06.11.2024 22 :32:12,435 ОШИБКА AuditService account.service.audit.AuditService run(ProfileChangeRequestDenied): java.lang.IllegalStateException: объект запроса был переработан и больше не связан с этим фасадом
Этот код не менялся в течение нескольких лет, но выдает эти ошибки только сейчас после нашего недавнего обновления до Tomcat 9. Согласно моим исследованиям, это Похоже, что Tomcat 9 изменил настройку по умолчанию org.apache.catalina.connector.RECYCLE_FACADES с false на true. Я понимаю проблему: наш код пытается получить доступ к запросу, которого больше не существует. Но этот базовый класс используется повсюду, а записи в журнале только начали появляться. В идеале я мог бы внедрить исправление, чтобы дать нам время поработать над более масштабным исправлением.
Вот дистиллированная версия класса ServiceAccount, которая, похоже, и есть то, что есть вызывая ошибку. С помощью пошаговой отладки я отследил его до вызова servletRequest.getHeader в методе getUserAgent, после чего появляется запись журнала.
Код: Выделить всё
import javax.servlet.http.HttpServletRequest;
public abstract class ServiceEvent {
private final HttpServletRequest servletRequest;
public ServiceEvent(HttpServletRequest servletRequest) {
this.servletRequest = servletRequest;
}
public String getUserAgent() {
String userAgent = null;
if (null != servletRequest) {
userAgent = servletRequest.getHeader(USER_AGENT);
}
return (userAgent == null) ? UNKNOWN : userAgent;
}
public abstract String getDetails();
}
Код: Выделить всё
CATALINA_OPTS="-D-Dorg.apache.catalina.connector.RECYCLE_FACADES=true ${CATALINA_OPTS}"
[*]Правильна ли моя гипотеза, и обновление значения RECYCLE_FACADES должно изменить это поведение?
[*]Правильно ли я выполняю настройку?
[*]Есть ли что-то еще, что я упускаю?
Обратите внимание: хотя я уже довольно давно работаю инженером-программистом, Я использую Java всего около года.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ered-in-as