Случайное исключение ConcurrentModificationException в приложении Tomcat
У нас есть приложение Java, развернутое в Tomcat 7.0.54. Перед tomcat находится Apache 2.4.10 с модулем SiteMinder в качестве обратного прокси. Tomcat работает под Sun jdk 1.8.0-45-64bit.
Существует плавающая ошибка, когда запрос к случайному ресурсу (icon или js scripts или css) приложения завершается неудачно с
java.util.ConcurrentModificationException
java.util.PriorityQueue$Itr.next(PriorityQueue.java:535)
java.lang.Iterable.forEach(Iterable.java:74)
com.our.groupid.entity.auth.User.getAllPermissionsAsListOfStrings(User.java:129)
com.our.groupid.app.auth.SiteMinderSessionUserDetails.<init>(SiteMinderSessionUserDetails.java:17)
com.our.groupid.app.auth.SiteMinderAuthenticationDetailsSource.buildDetails(SiteMinderAuthenticationDetailsSource.java:61)
com.our.groupid.app.auth.SiteMinderAuthenticationDetailsSource.buildDetails(SiteMinderAuthenticationDetailsSource.java:13)
org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doAuthenticate(AbstractPreAuthenticatedProcessingFilter.java:178)
org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doFilter(AbstractPreAuthenticatedProcessingFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
Что еще хуже, это не могло быть воспроизведено в автономном Tomcat. Я предполагаю, что что-то не так с сессиями \ запросами между Apache и Tomcat, но не смог найти ничего подозрительного в журнале.
Кто-нибудь имеет представление о первопричине такого поведения?
1 ответ
Похоже, я нашел это.
Apache работал с mod_proxy_http
и делает некоторые беспорядок с заголовками.
Переключиться на mod_proxy_ajp
решает мою проблему. Так ConcurrentModificationException
был только симптом.