Using Spring MVC 3.1+ WebApplicationInitializer to programmatically configure session-config and error-page
I done a bit of research on this topic and found that for some of the configurations like sessionTimeOut and error pages you still need to have the web.xml.
Have look at this Link
Hope this helps you. Cheers.
Using spring-boot it's pretty easy.
I am sure it could be done without spring boot as well by extending SpringServletContainerInitializer. It seems that is what it is specifically designed for.
Servlet 3.0 ServletContainerInitializer designed to support code-based configuration of the servlet container using Spring's WebApplicationInitializer SPI as opposed to (or possibly in combination with) the traditional web.xml-based approach.
Sample code (using SpringBootServletInitializer)
public class MyServletInitializer extends SpringBootServletInitializer {
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory containerFactory = new TomcatEmbeddedServletContainerFactory(8080);
// configure error pages
containerFactory.getErrorPages().add(new ErrorPage(HttpStatus.UNAUTHORIZED, "/errors/401"));
// configure session timeout
containerFactory.setSessionTimeout(20);
return containerFactory;
}
}
Actually WebApplicationInitializer
doesn't provide it directly. But there is a way to set sessointimeout with java configuration.
You have to create a HttpSessionListner
first :
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
//here session will be invalidated by container within 30 mins
//if there isn't any activity by user
se.getSession().setMaxInactiveInterval(1800);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("Session destroyed");
}
}
After this just register this listener with your servlet context which will be available in WebApplicationInitializer
under method onStartup
servletContext.addListener(SessionListener.class);