有没有办法在创建或过期会话时运行函数?

问题描述 投票:0回答:1

我目前正在计划一个应用程序,它需要在创建会话和到期时运行函数。我打算使用像redis这样的东西,但我对其他想法持开放态度。我正在寻找的是一个注释,如@whenexpires和@whencreated。我知道大多数会话的注释都在课堂上,而不是方法谢谢。

spring-boot spring-mvc spring-session
1个回答
0
投票

从Servlet规范2.3开始,像Apache Tomcat这样的Java Servlet容器提供了HttpSessionListener接口,以便在创建或销毁会话时执行自定义逻辑。基本用法:

package com.example;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MySessionListener implements HttpSessionListener {

  @Override
  public void sessionCreated(HttpSessionEvent event) {
  }

  @Override
  public void sessionDestroyed(HttpSessionEvent event) {
  }
}

MySessionListener添加到你的web.xml或 - 在Spring的情况下 - 为Spring声明一个Spring bean。但是,不需要Spring,因为HttpSessionListener是Java Servlet规范的一部分。

如果您使用Redis进行Spring Session,您可以继续使用HttpSessionListener,将其添加到Spring配置中,如official docs中所述。

@EnableRedisHttpSession 
public class Config {

    @Bean
    public MySessionListener mySessionListener() {
        return new MySessionListener(); 
    }

    // more Redis configuration comes here...
}

此外,Spring Session还支持“Spring-native”的事件订阅和发布方式:ApplicationEvent。根据会话持久性方法,您的应用程序当前最多可以捕获三个事件:SessionExpiredEventSessionCreatedEventSessionDestroyedEvent

实现EventListener以订阅Spring Session事件,例如:

package com.example;

import org.springframework.context.event.EventListener;
import org.springframework.session.events.SessionCreatedEvent;
import org.springframework.session.events.SessionDestroyedEvent;
import org.springframework.session.events.SessionExpiredEvent;
import org.springframework.stereotype.Component;

@Component
public class MySessionEventListener {

    @EventListener
    public void sessionDestroyed(SessionDestroyedEvent event) {
    }

    @EventListener
    public void sessionCreated(SessionCreatedEvent event) {
    }

    @EventListener
    public void sessionExired(SessionExpiredEvent event) {
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.