How to set timeout of a session in Vaadin 8?
I am not using web.xml, which has been the place to set it in prior versions of the framework.
You can set the standard Servlet session’s timeout as a int
number of whole seconds, after extracting from the wrapping VaadinSession
.
VaadinSession.getCurrent().getSession().setMaxInactiveInterval ( ( int ) TimeUnit.MINUTES.toSeconds( 30 ) ) ;
Setting the session timeout is a feature in your web container, your Servlet engine, such as Tomcat, Jetty, etc. The Servlet spec defines this behavior for Java apps as part of its session handling.
Vaadin wraps the Servlet session inside a VaadinSession
. So extract the regular Servlet session from Vaadin as a WrappedSession
, then call the setMaxInactiveInterval
method to set the time to expire.
Specify the time limit as a number of whole seconds. The TimeUnit
enum is handy to calculate the seconds without resorting to “magic” numbers.
VaadinSession // Wraps a standard Servlet session.
.getCurrent() // Access the current user’s session.
.getSession() // Access the wrapped standard Servlet session.
.setMaxInactiveInterval( // Set the timeout.
( int ) // Cast a `long` to an `int`.
TimeUnit // The `TimeUnit` enum is more self-documenting than using a literal integer number.
.MINUTES // Here we set a half hour, 30 minutes.
.toSeconds( 30 ) // Set a number of whole seconds.
)
;
Here is a complete example Vaadin 8.5 app created from the Maven archetype vaadin-archetype-application
. We added a single line to the beginning of the init
method.
package com.basilbourque.example;
import javax.servlet.annotation.WebServlet;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.server.VaadinSession;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import java.util.concurrent.TimeUnit;
/**
* This UI is the application entry point. A UI may either represent a browser window
* (or tab) or some part of an HTML page where a Vaadin application is embedded.
* <p>
* The UI is initialized using {@link #init(VaadinRequest)}. This method is intended to be
* overridden to add component to the user interface and initialize non-component functionality.
*/
@Theme ( "mytheme" )
public class MyUI extends UI {
@Override
protected void init ( VaadinRequest vaadinRequest ) {
// Set Session timeout programmatically. Overrides the default timeout configured for Servlet.
VaadinSession.getCurrent().getSession().setMaxInactiveInterval( ( int ) TimeUnit.MINUTES.toSeconds( 45 ) ); // Setting timeout of 45 minutes = ( 45 * 60 ) seconds.
final VerticalLayout layout = new VerticalLayout();
final TextField name = new TextField();
name.setCaption( "Type your name here:" );
Button button = new Button( "Click Me" );
button.addClickListener( e -> {
layout.addComponent( new Label( "Thanks " + name.getValue()
+ ", it works!" ) );
} );
layout.addComponents( name , button );
setContent( layout );
}
@WebServlet ( urlPatterns = "/*",
name = "MyUIServlet",
asyncSupported = true )
@VaadinServletConfiguration ( ui = MyUI.class,
productionMode = false )
public static class MyUIServlet extends VaadinServlet {
}
}
I am not using web.xml, which has been the place to set it in prior versions of the framework.
Actually, the session timeout is a Servlet thing, not a Vaadin-specific thing. And the web.xml
is a Servlet thing, not a Vaadin-specific thing.
See:
javax.servlet.http.HttpSession::setMaxInactiveInterval(int interval)
methodFurther discussed in How to set session timeout dynamically in Java web applications?.
Session timeout is set in web.xml.
If you don't have one, then you will need to create one.
How do i set session timeout in seconds in web.xml?
As you seem to use spring boot, then this might apply to you
Spring Boot Java Config Set Session Timeout
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With