java - Spring Security应用程序调用事件监听器

标签 java spring spring-security

我只是通过实现 ApplicationListener 创建一个监听器。 代码如下:


public class SessionCreationEventListener  implements ApplicationListener{

    public void onApplicationEvent(SessionCreationEvent appEvent) {
        SessionCreationEvent event = (SessionCreationEvent) appEvent;
        //Object obj = null;
        //UserInfo userInfo = null;
        event.getSource();  
    }
}

但是,无法调用此监听。我在调用监听器时哪里错了。

最佳答案

在 web.xml 文件中添加此监听器

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

在一个简单的应用程序中,解决方案是添加一个 HttpSessionListener。 因此,在我的 web.xml 中:

<listener>
  <listener-class>com.web.SessionCounter</listener-class>
</listener>
监听器的代码为:
public class SessionCounter implements HttpSessionListener {
    private int counter = 0;

    @Override
    public void sessionCreated(HttpSessionEvent event) {
        counter++;
        System.out.println("Total sessions created " + counter);
    }

    // other methods
}
现在,每当 Spring 创建 session 时,我的监听器就会被激活,并且消息将被记录到控制台。 创建的 session 总数 1 这种方法的限制是上述监听器位于 Spring 环境之外。如果我们需要在这里访问bean,那么代码就会变得复杂。 Spring Security 提供了解决该问题的方法。他们实现了一个监听器 - HttpSessionEventPublisher。
public class HttpSessionEventPublisher implements HttpSessionListener {
...
}

关于java - Spring Security应用程序调用事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26053063/

相关文章:

java - Object 类的 equals() 方法

Java 6 和 SwingUtilities2

java - 如何在每次启动应用程序时进行OTP验证?

javascript - JSTL 复选框不起作用

java - MVC 拦截器 vs Spring 安全过滤器 vs 其他东西......?

java - 具有 spring 安全性的程序化记住我

java - 从 Jtable 中删除行时出错

mysql - MySQL等同于Oracle的SEQUENCE.NEXTVAL

java - Spring-Boot 中 application.properties 属性的 UTF-8 编码

java - Spring security 登录后如何跳转到另一个页面