Spring安全性和JSF:登录时对backingbean调用方法



我希望在用户登录后调用会话范围的backingbean中的一个方法。我该怎么做?

环境:Spring Security 3.0.x、Spring 3.0.x和JSF 1.2。后台bean由Spring管理。

背景:即使没有登录,会话也会创建。我的会话范围的bean包含设置,这些设置最初设置为默认值。登录后,我想将会话状态更新为该特定用户的数据库中存储的首选项。为了实现这一点,我设想了一个接口,甚至更简单的注释(例如@PostLogin)方法,但到目前为止,我还没有找到类似的方法。

如果在每次主体更改时调用该方法,也就是在注销时调用,那就可以了。如果在登录时销毁并重新创建整个bean,这也是可以接受的,尽管我的其他会话范围的bean应该可以存活下来。

到目前为止,我发现的是:

  • ApplicationListener<AuthenticationSuccessEvent>:侦听器显然需要是应用程序范围的,我无法在其中访问会话范围的bean。@Autowired加范围代理不起作用。注入的对象已损坏;虽然真正的backingbean包含依赖项,但它不包含依赖项
  • <表单登录身份验证成功处理程序ref="..">:我还没有尝试过,但我需要独立于所使用的登录过程来调用该方法。除了基于表单,我们支持记住我和程序登录(例如,在忘记密码过程后自动登录)

回答我自己的问题:

ApplicationListener是正确的轨道,而@Autowired不是。

我用一个方法定义了一个接口,该方法由我的会话范围的bean实现。然后,(单例作用域)事件侦听器类使用ApplicationContext.getBeansOfType(..)通过该接口查找会话bean,并在每个会话bean上调用接口的方法。

最新更新