Spring安全应用程序调用事件监听器

时间:2014-09-26 06:05:33

标签: 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();  
    }
}

但是,不能称之为听。在调用监听器时我在哪里错了。

1 个答案:

答案 0 :(得分:4)

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



 <listener>
    <listener-class>
      org.springframework.security.web.session.HttpSessionEventPublisher
    </listener-class>
  </listener> 
&#13;
&#13;
&#13;

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

&#13;
&#13;
<listener>
  <listener-class>com.web.SessionCounter</listener-class>
</listener>
&#13;
&#13;
&#13; 监听器的代码是:
&#13;
&#13;
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
}
&#13;
&#13;
&#13; 现在每当Spring创建一个会话时,我的监听器就会被激活,并且消息将被记录到控制台。 创建的会话总数为1 这种方法的局限性在于上面的监听器不在Spring环境中。如果我们需要在这里访问bean,那么代码就变得复杂了。 Spring Security为此问题提供了一种解决方法。他们实现了一个监听器 - HttpSessionEventPublisher。
&#13;
&#13;
public class HttpSessionEventPublisher implements HttpSessionListener {
...
}
&#13;
&#13;
&#13;