有没有办法在会话创建或过期时使用函数 运行?
Is there a way to have a function run when a session is created or expired?
我目前正在计划一个应用程序,该应用程序需要一个函数来 运行 每当会话创建和过期时。我打算使用像 redis 这样的东西,但我对其他想法持开放态度。我正在寻找的是一个 n 注释,例如@whenexpires 和@whencreated。我知道会话的大部分注释都在 class,而不是方法。谢谢。
从 Servlet 规范 2.3 开始,Java 像 Apache Tomcat 这样的 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 bean,它被 Spring 检测到。但是,Spring 不是必需的,因为 HttpSessionListener
是 Java Servlet 规范的一部分。
如果您使用 Redis 进行 Spring 会话,您可以继续使用 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。根据会话持久性方法,当前最多可以由您的应用程序捕获三个事件:SessionExpiredEvent
、SessionCreatedEvent
、SessionDestroyedEvent
.
实施 EventListener
以订阅 Spring 会话事件,例如:
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) {
}
}
我目前正在计划一个应用程序,该应用程序需要一个函数来 运行 每当会话创建和过期时。我打算使用像 redis 这样的东西,但我对其他想法持开放态度。我正在寻找的是一个 n 注释,例如@whenexpires 和@whencreated。我知道会话的大部分注释都在 class,而不是方法。谢谢。
从 Servlet 规范 2.3 开始,Java 像 Apache Tomcat 这样的 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 bean,它被 Spring 检测到。但是,Spring 不是必需的,因为 HttpSessionListener
是 Java Servlet 规范的一部分。
如果您使用 Redis 进行 Spring 会话,您可以继续使用 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。根据会话持久性方法,当前最多可以由您的应用程序捕获三个事件:SessionExpiredEvent
、SessionCreatedEvent
、SessionDestroyedEvent
.
实施 EventListener
以订阅 Spring 会话事件,例如:
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) {
}
}