Vaadin 8 устанавливает тайм-аут сеанса

Как установить время ожидания сеанса в Vaadin 8?

Я не использую web.xml, который использовался для установки в предыдущих версиях фреймворка.


person Stimpson Cat    schedule 12.02.2018    source источник


Ответы (2)


tl;dr

Вы можете установить стандартный тайм-аут сеанса сервлета как int количество полных секунд после извлечения из оболочки VaadinSession.

VaadinSession.getCurrent().getSession().setMaxInactiveInterval ( ( int ) TimeUnit.MINUTES.toSeconds( 30 ) ) ;

Установить время ожидания сеанса программно

Установка времени ожидания сеанса — это функция в вашем веб-контейнер, ваш механизм сервлетов, например Tomcat, Jetty и т. д. Servlet определяет это поведение для приложений Java как часть обработки сеанса.

Vaadin заключает сеанс сервлета в VaadinSession . Поэтому извлеките обычный сеанс сервлета из Vaadin как WrappedSession< /a>, затем вызовите setMaxInactiveInterval для установки времени истечения срока действия.

Укажите ограничение по времени в виде целых секунд. Перечисление TimeUnit удобно для подсчета секунд, не прибегая к "магическим" числам.

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.      
)
;

Вот полный пример приложения Vaadin 8.5, созданного на основе архетипа Maven vaadin-archetype-application. Мы добавили одну строку в начало метода init.

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 {
    }
}

Сервлет, а не Ваадин

Я не использую web.xml, который использовался для установки в предыдущих версиях фреймворка.

На самом деле тайм-аут сеанса — это вещь Servlet, а не специфичная для Vaadin вещь. И web.xml - это Servlet, а не Vaadin.

Видеть:

Подробнее обсуждается в разделе Как динамически установить время ожидания сеанса в веб-приложениях Java?.

person Basil Bourque    schedule 20.11.2018
comment
Спасибо. Я думаю, что 30 все еще является магическим числом в вашем примере, лучше используйте константу SESSION_TIMEOUT_HALF_HOUR или что-то в этом роде. Но тем не менее спасибо! - person Stimpson Cat; 21.11.2018

Время ожидания сеанса задается в файле web.xml.

Если у вас его нет, то вам нужно будет его создать.

Как установить время ожидания сеанса в секундах в Интернете .xml?

Поскольку вы, кажется, используете весеннюю загрузку, это может относиться к вам

Время ожидания сеанса Spring Boot Java Config Set

person André Schild    schedule 12.02.2018
comment
Где должен находиться этот файл? Я использую весеннюю загрузку - person Stimpson Cat; 12.02.2018
comment
@StimpsonCat Кроме того, вы можете установить его программно, например, вызвав VaadinSession.getCurrent().getSession().setMaxInactiveInterval(numberOfSeconds); в своем методе init. - person Morfic; 12.02.2018
comment
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. – Из обзора - person grizzthedj; 14.02.2018
comment
@grizzthedj Согласен с внешними ссылками, но это также посты stackoverflow. Если бы у пользователя был более четкий вопрос, я мог бы пометить его как дубликат материала весенней загрузки. - person André Schild; 14.02.2018
comment
Вопрос всегда ясен. Но комментарии не помогли, ибо не работают - person Stimpson Cat; 20.08.2018