Spring安全性和JSF:登录时支持bean的调用方法?

Spring安全性和JSF:登录时支持bean的调用方法?,jsf,login,spring-security,Jsf,Login,Spring Security,我希望在用户登录后调用会话范围的支持bean中的方法。我该怎么做 环境:SpringSecurity3.0.x、Spring3.0.x和JSF1.2。支持bean由Spring管理 后台:即使不登录也会创建会话。我的会话范围bean保存设置,这些设置最初设置为默认值。登录后,我想将会话状态更新为数据库中存储的特定用户的首选项。为了实现这一点,我设想了一个接口,或者更简单的一个带注释的(例如,@PostLogin)方法,但到目前为止,我还没有找到类似的方法 如果在每次主体更改时都调用该方法,也就是

我希望在用户登录后调用会话范围的支持bean中的方法。我该怎么做

环境:SpringSecurity3.0.x、Spring3.0.x和JSF1.2。支持bean由Spring管理

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

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

到目前为止,我发现:

  • ApplicationListener:侦听器显然需要是应用程序范围的,而我无法在其中访问会话范围的bean<代码>@Autowiredplus作用域代理无法工作。注入物破裂;它不包含依赖项,尽管真正的支持bean包含依赖项
  • :尚未尝试此操作,但我需要独立于使用的登录过程调用该方法。除了基于表单之外,我们还支持记住我和编程登录(例如,忘记密码后自动登录)

    • 回答我自己的问题:

      ApplicationListener
      是正确的,但是
      @Autowired
      不是

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