Как поддержать пользовательскую сессию в проекте Vaadin - PullRequest
1 голос
/ 22 ноября 2011

Я хочу добавить поддержку пользовательских сеансов в свое приложение. Поскольку перезагрузка страницы перезапустит приложение, и даже открытие другой вкладки браузера вызовет исходную проблему «несинхронизировано».

Нужно ли создавать независимое окно для каждого входа в систему, или есть какой-нибудь плагин, который я могу использовать, или если я сделаю его приложением Spring + Vaadin, решит ли он эту проблему?

Ответы [ 2 ]

5 голосов
/ 22 ноября 2011

Приложения, созданные с помощью Vaadin Framework, автоматически сохраняют состояние, поэтому ваше приложение должно сохранять свое состояние, если в URL не указан параметр? RestartApplication.

Для поддержки вкладок / окон с несколькими окнами браузера в одном сеансе необходимо переопределить getWindow (имя строки) в классе Application, чтобы возвращать новый экземпляр Window для каждой вкладки / окна браузера:

@Override
public Window getWindow(String name) {

    // If the window is identified by name, we are good to go
    Window w = super.getWindow(name);

    // If not, we must create a new window for this new browser window/tab
    if (w == null) {
        w = new CalcWindow();

        // Use the random name given by the framework to identify this
        // window in future
        w.setName(name);
        addWindow(w);

        // Move to the url to remember the name in the future
        w.open(new ExternalResource(w.getURL()));
    }

    return w;
}

Для получения дополнительной информации о многооконной поддержке Vaadin см. эту вики-страницу .

4 голосов
/ 22 ноября 2011

Перезагрузка страницы должна не перезапустить приложение, если ваш URL не заканчивается на ?restartApplication=true.

Объект Application хранится в сеансе HTTP, поэтому все, что вы хотите сохранить для каждого пользователя, может быть связано с приложением.

Как правило, каждый процесс браузера может поддерживать только один сеанс HTTP, следовательно, вы сможете поддерживать только одного пользователя на браузер (если вы не приложите значительные усилия и не сохраните состояние для каждого пользователя в каждом окне уровня приложения. не делайте этого, если вы не знаете, что делаете: в веб-приложениях норма для каждого http-сеанса является нормой)

Spring + Vaadin - хорошая комбинация - я использую это соединение для наших проектов, но они не особенно полезны в этом контексте.

Vaadin не поддерживает несколько окон / вкладок в конфигурации по умолчанию (следовательно, ваши ошибки не синхронизированы). Тем не менее, написать код для этого тривиально: вот простое объяснение и некоторый код

...