【问题标题】:Listener for Session Expiration in Spring春季会话过期的监听器
【发布时间】:2013-11-01 07:19:28
【问题描述】:

我是 Spring Security 的新手,并使用它进行身份验证。我面临一个问题,即当浏览器关闭或发生任何异常故障时,会话会过期,但我无法捕获事件以执行清理代码。 我对此进行了探索,并在 Spring 中找到了 HttpSessionEventPublisher 以在 sessionDestroyed() 方法中捕获 HttpSessionDestroyedEvent 但是当我关闭浏览器时不会调用它。

请求提出相同的解决方案。

【问题讨论】:

  • 我添加了一个解决方案。希望这会有所帮助并让我知道。

标签: java spring session spring-security


【解决方案1】:

可以使用JQuery解决浏览器关闭问题,

JQuery 将是,

$(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);
        }
    });
});

Spring控制器中,

@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.xml中添加这个,如果你使用HttpSessionEventPublisher来捕获会话销毁事件,

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

希望这会有所帮助。

【讨论】:

  • 我没有尝试过,但是如果禁用 javascript 或系统崩溃会发生什么。
  • 必须启用JavaScript。今天,没有没有javascript的Web应用程序。
  • @HyperLink 这是否也可以只使用没有 Ajax 的 JQuery 来完成,因为我们的系统只使用直接的 Spring MVC 和直接的客户端通信?谢谢。
【解决方案2】:

你需要在web.xml注册监听器!

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

当然,它只检测到会话已关闭(由于超时或某些显式的编程会话破坏),但它不会检测到有人关闭了他的浏览器。这是因为没有关于关闭浏览器的 http 通知。

【讨论】:

    【解决方案3】:

    也许SessionManagementFilter 能帮上忙?

    或者您可以配置 Spring Security 以在发生超时时自动重定向用户:Detecting timeouts 部分。

    【讨论】:

    • SessionManagementFilter 将帮助我跟踪和验证每个请求,但在关闭浏览器时,服务器不会发送此类请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    相关资源
    最近更新 更多