2013-10-23 11 views
7

私は春のセキュリティが新しく、認証にこれを使用しています。私は、ブラウザが閉じられたり、異常な異常が発生した場合には、セッションが終了する問題を抱えていますが、クリーンアップされたコードが実行されるようにイベントをキャッチできません。 私はそれについて調べて、がHttpSessionDestroyedEventsessionDestroyed()の方法でキャプチャするのを見つけましたが、ブラウザを閉じると呼び出されません。春のSession Expirationのリスナー

解決策を提案するように依頼する。

+0

私は解決策を追加しました。これが役立ち、私に教えてください。 –

答えて

1

SessionManagementFilterが役立ちますか?

また、タイムアウトが発生した場合に自動的にユーザーをリダイレクトするようにSpring Securityを構成することもできます。Detecting timeoutsセクション。

+0

SessionManagementFilterはすべてのリクエストをトレースして認証するのに役立ちますが、ブラウザを閉じてもそのリクエストはサーバーで送信されません。 – Prashant

0

リスナーをweb.xmlに登録する必要があります。

<listener> 
     <listener-class> 
      org.springframework.security.web.session.HttpSessionEventPublisher 
     </listener-class> 
</listener> 

しかし、もちろん、それは唯一のセッションが(理由はタイムアウトまたは一部expliciteプログラムによるセッション破棄の)閉じていることを検出しますが、 それは、誰かが彼のブラウザを閉じていることを検出しません。これは、クローズド・ブローサーに関するhttp通知がないためです。

-3

あなたはブラウザ閉鎖問題を解決するためにjQueryのを使用することができ、

jQueryのは、In

$(window).on('beforeunload', function(){ 
    return 'Are you sure you want to leave?'; 
}); 

$(window).on('unload', function(){ 
    //alert("unload"); 
    $.ajax({ 
     type: "POST", 
     url: "Logout.html", 
     //data: "message=" + message, 
     dataType: "html", 

     success: function(response) { 

     }, 
     error: function(e) { 
      //alert('Error: ' + e); 
     } 
    }); 
}); 
春コントローラ

@RequestMapping(value="Logout.html",method=RequestMethod.POST) 
public @ResponseBody String logout(HttpSession session){ 

    System.out.println("Request Logout"); 

    // Do you work before invalidate the session 

    session.invalidate(); 

} 

になりますweb.xmあなたがイベントを破棄し、セッションをキャッチするためにHttpSessionEventPublisherを使用した場合リットルは、これを追加し、

<listener> 
     <listener-class> 
     org.springframework.security.web.session.HttpSessionEventPublisher 
     </listener-class> 
</listener> 

は、この情報がお役に立てば幸いです。

+0

私はこれを試していないが、javascriptが無効になっている場合や、システムがクラッシュした場合にどうなるでしょう。 – Prashant

+0

JavaScriptを有効にする必要があります。今日、javascriptのないWebアプリケーションはありません。 –

+0

@HyperLink私たちのシステムはダイレクトクライアント通信でまっすぐなSpring MVCを使用するだけなので、これはAjaxを使わないJQueryを使ってもできますか?ありがとう。 –

関連する問題