3

アプリケーションサーバー(グラスフィッシュ)で定義されたレルムでjaasを使用して、ユーザー認証と承認を行うvaadin 7アプリケーションを開発しています。

私はこの要件を持っています:

  • ユーザーは、毎回パスワードを入力する必要がないように、しばらくの間ログインしたままにすることができます。
    これを行うには、http セッションのセッション タイムアウトを設定します。

  • vaadin セッションは一部のリソースをロックできます。ロックされている間、他のセッションはこのリソースを使用できません。ロックされたすべてのリソースは、vaadin セッションが閉じられると解放されます。
    ハートビート間隔をわずか 15 秒に設定しました。

両方の要件を同時に機能させることはできません。http セッションのタイムアウトを 1 分に設定すると、ブラウザを閉じてから 1 分後にリソースが解放されますが、ユーザーは次回認証されません。
https セッションのタイムアウトを数日に設定すると、ユーザーはこの時間だけ認証されますが、ハートビートが 3 回失われた後、vaadin セッションがすぐに閉じられません。ユーザーが次回同じ http セッションでアプリケーションを使用するときにのみ閉じられます。

両方の要件をどのように達成することができますか?

私が使用しているテクノロジーの詳細は次のとおりです。

  • グラスフィッシュ 4
  • ウェブアプリ 3.1
  • ヴァーディン7.1.7
  • vaadin-cdi 1.0-SNAPSHOT

助けてくれてありがとう

4

2 に答える 2

1

ご質問にはあいまいな点がありますが、独自の close() メソッドを使用することで解決できると思います。カスタムの close() メソッドを使用して独自の Vaadin Application クラスを作成するか、TPTApplication を使用してその close() メソッドをオーバーライドすることができます。

http://vaadin.com/directory#addon/toolkit-productivity-tools:vaadin

セッションが閉じられたときに close が呼び出されることを確認し、そこでクリーンアップを行います。これは、セッションの終了時にも呼び出されます。

これを確認できない場合 (つまり、ユーザーがウィンドウを閉じるだけで、これを処理するための JavaScript がない場合)、Vaadin でウィンドウを閉じるのをインターセプトできますが、かなり手間がかかります。ユーザーがウィンドウを閉じようとすると、プロセスを中断し、コールバックを介して必要な処理を行ってから、閉じるようにします。vaadin からの割り込みを行う方法の詳細を次に示します。

https://vaadin.com/forum/#!/thread/44621/44668
https://vaadin.com/forum/#!/thread/83207/83206

コールバックはクライアント側のみであるため、これをリッスンしているサーブレットにセッション ID を渡すサーバーを呼び出す必要があります (JavaScript 経由で Get/POST)。サーブレットは、渡されたセッション ID を使用してロックを解放します。

重要なのは、ウィンドウが閉じるのをリッスンし、適切に応答できるようにすることです。

于 2013-10-28T15:28:21.800 に答える