Convert session timeout to minutes for Tomcat

Convert any session timeout values from seconds to minutes when
configuring Tomcat.

Fixes gh-1422
This commit is contained in:
Phillip Webb 2014-08-28 14:24:55 -07:00
parent a07f0272f9
commit 0c0a0a7738
2 changed files with 16 additions and 3 deletions

View File

@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
@ -261,7 +262,12 @@ public class TomcatEmbeddedServletContainerFactory extends
for (MimeMappings.Mapping mapping : getMimeMappings()) {
context.addMimeMapping(mapping.getExtension(), mapping.getMimeType());
}
context.setSessionTimeout(getSessionTimeout());
long timeout = getSessionTimeout();
if (timeout > 0) {
// Tomcat timeouts are in minutes
timeout = Math.max(TimeUnit.SECONDS.toMinutes(timeout), 1L);
}
context.setSessionTimeout((int) timeout);
for (TomcatContextCustomizer customizer : this.tomcatContextCustomizers) {
customizer.customize(context);
}

View File

@ -155,14 +155,21 @@ public class TomcatEmbeddedServletContainerFactoryTests extends
public void sessionTimeout() throws Exception {
TomcatEmbeddedServletContainerFactory factory = getFactory();
factory.setSessionTimeout(10);
assertTimeout(factory, 10);
assertTimeout(factory, 1);
}
@Test
public void sessionTimeoutInMins() throws Exception {
TomcatEmbeddedServletContainerFactory factory = getFactory();
factory.setSessionTimeout(1, TimeUnit.MINUTES);
assertTimeout(factory, 60);
assertTimeout(factory, 1);
}
@Test
public void noSessionTimeout() throws Exception {
TomcatEmbeddedServletContainerFactory factory = getFactory();
factory.setSessionTimeout(0);
assertTimeout(factory, -1);
}
@Test