2

私はSpring MVCを使ってWebアプリケーションを実装しました。 Webアプリケーションは、デスクトップユーザーインターフェイスを備えたシステムに統合されています。私はユーザーがdestkopのGUIからWebアプリケーションのセッションを閉じることを許可したいと思います。他のスレッドからhttpセッションを閉じる

非常に洗練されていないソリューションを実装しようとしました。httpsessionの無効化を呼び出しますが、実行中のHTTP要求内でセッションが無効になっているときに壊れることがあります。セッション属性にアクセスしようとしているためセッションがすでに無効であるため、レンダリング(特にWebUtil.getSessionAttribute)を呼び出そうとすると、DispatcherServletでIllegalStateExceptionがスローされます。

私の質問は、HTTPリクエストを実行しているときに競合することなく、非httpリクエストスレッドからセッションからユーザを蹴る方法がありますか?少なくとも、私が管理できる紛争。

おかげで、

ホルヘ

+0

hmm JMX経由でセッション情報を取得できることがわかりました。 Apache Tomcat。アプリケーションサーバー/サーブレットコンテナはJMXコンソールで確認できます。セッションを終了する可能性がある場合は、JMX APIをプログラマチックに使用できます。 – fasseg

+0

ありがとう@fas。私はJMX APIを見ていきます。とにかく、私はそれをWebアプリケーションサーバーとは別に使用したいと思います。だから誰も他のオプションを知っているかどうかを見てみましょう。 – Jorge

答えて

2

その後、session.invalidateを呼び出して、あなたが期限切れにしたいセッションの静的セット、および現在のセッションのためにこのセットをチェックするサーブレットフィルタを含む機構をロールに手ができユーザーをきれいにリダイレクトします。デスクトップAPIはこのセットにセッションを追加するだけで、次のリクエスト時にユーザーは完全に(HTTPリクエストスレッドで)無効になります。

メモリリークを防ぐために、無効化時にこのセットからセッションを削除するリスナーが必要です。このセットには有効なセッションのみが含まれていることを確認してください。

関連する問題