The ErrorPageFilter exposes a wrapped response to the downstream
chain and unless more care is taken the chain will be able to
set the response status, but not inspect it.
Fixes gh-2367
Previously, when LogbackLoggingSystem or Log4JLoggingSystem were
initialized during application start up, they would install SLF4J’s Java
logging bridge handler, however no corresponding uninstall was performed
during application shutdown. When deployed to a servlet container, where
the application’s lifecycle doesn’t match the JVM’s lifecycle, this lead
to a memory leak.
This commit updates LoggingSystem to introduce a new cleanUp method. An
empty implementation is provided to preserve backwards compatibility
with existing LoggingSystem subclasses. Both LogbackLoggingSystem and
Log4JLoggingSystem have been updated to implement cleanUp and uninstall
the SLF4J bridge handler. LoggingApplicationListener has been updated
to call LoggingSystem.cleanUp in response to a ContextClosedEvent.
Closes gh-2324
The various servlet containers that we support vary in the quality
of their diagnostics when ServletContext.addListener fails. To make
problem diagnosis easier, this commit ensures that the toString of the
the listener that was being added is included in the exception that's
thrown when a failure occurs.
Closes gh-2197
Update DEFAULT_SESSION_TIMEOUT to use TimeUnit.MINUTES.toSeconds(30)
rather than TimeUnit.SECONDS.toMinutes(30) which would always return
0.
See gh-2084
(cherry picked from commit b33bbd56)
Update AbstractConfigurableEmbeddedServletContainer to set the default
session timeout to 30 minutes. Also correct Javadoc to specify that
the default is '30 minutes'.
Fixes gh-2084
Previously, if Logback was being used as Boot's logging system, but
Log4J was also on the classpath before SLF4J and Logback, JBoss
Logging would use Log4J for its logging. This lead to warning messages
being produced as Log4J was not configured:
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
This commit updates LogbackLoggingSystem to set the
org.jboss.logging.provider to "slf4j". This ensure that JBoss Logging
will use SLF4J and Logback as intended even when Log4J is also on the
classpath.
Closes gh-1928
Previously, for a non-async response with a successful status (< 400),
ErrorPageFilter would always call flushBuffer. This triggers an
exception in Tomcat if the client has closed the connection before the
response has been fully sent. In this case, Tomcat treats the response
as successful and commits it before control returns to the filter.
This commit updates ErrorPageFilter to only perform the flush if the
response has not already been committed, leaving any further flushing
that may be necessary to be handled by the servlet container.
Fixes gh-1938
To make it easier to identify the source of the competing LoggerFactory
implementation, this commit updates the exception message to include
the code source location of the offending class.
Closes gh-1630
In some scenarios, the ErrorPageFilter will want to forward the request
to an error page but the response has already been committed. One common
cause of this is when the filter’s running on WAS. WAS calls
flushBuffer() (which commits the response), upon a clean exit from a
servlet’s service method.
Previously, the filter would attempt the forward, even if the response
was committed. This would result in an IllegalStateException and a
possibly incomplete response that may also have an incorrect status
code.
This commit updates the ErrorPageFilter to check to see if the response
has already been committed before it attempts to forward the request to
the error page. If the response has already been committed, the filter
logs an error and allows the container’s normal handling to kick in.
This prevents an IllegalStateException from being thrown.
This commit also updates the response wrapper to keep track of when
sendError has been called. Now, when flushBuffer is called, if
sendError has been called, the wrapper calls sendError on the wrapped
response. This prevents the wrapper from suppressing an error when the
response is committed before the request handling returns to the error
page filter.
Closes gh-1575
Update RelaxedConversionService to also support String to char[]
conversion. Primarily to support the `password` field in
MongoProperties.
Fixes gh-1572
Update ConfigFileApplicationListener to include more debug level output.
Debug messages are recorded during onApplicationEnvironmentPreparedEvent
but not actually output until onApplicationPreparedEvent. This is
because the logging level might not have been correctly set until the
context is completely prepared.
Fixes gh-1584
Previously, only the state of the primary connector was checked when
verifying that the embedded Tomcat instance has started successfully.
This commit updates the verification logic to examine all of the
service's connectors, thereby also detecting startup failures of any
additional connectors the have been configured.
A check on the primary connector's state has been removed from
initialize as, at this stage, its state will always be NEW.
Fixes gh-1591
... or couldn't hurt anyway.
1. Extends the definition of a web application for @ConditionalOnWebapp
so that a StandardEnvironment can be used (cutting out JNDI failures
for Environment properties)
2. Doesn't bother using StandardServletEnvironment in integration tests
3. Make the NON_ENUMERABLE_ENUMERABLES in PropertySourcesPropertyValues
static so they only get initialized once (not a huge issue at all)
Update `LogbackLoggingSystem` to call the `reset()` method on the
`LoggerContext` before initialization.
This will hopefully reset the context to prevent the same appenders
from being accidentally added more than once.
Fixes gh-1091
This is a continuation of the changes made in 611f978. It makes some
more @Bean methods public and adds tests to spring-boot-actuator and
spring-boot-autoconfigure to prevent against non-public methods being
introduced in the future
Closes gh-1571
Change SpringApplicationContextLoader to set active profiles using the
`spring.profiles.active` environment property rather than calling
`SpringApplication.setAdditionalProfiles`. This allows @ActiveProfiles
to replace existing profiles rather than add to them which is consistent
with the Spring TestContext Framework.
Fixes gh-1469