Spring 安全性和 JSF:在登录时调用支持 bean 的方法?
Posted
技术标签:
【中文标题】Spring 安全性和 JSF:在登录时调用支持 bean 的方法?【英文标题】:Spring security and JSF: call method on backing bean on login? 【发布时间】:2012-04-12 20:47:40 【问题描述】:我希望在用户登录后调用会话范围的支持 bean 中的方法。我该怎么做?
环境:Spring Security 3.0.x、Spring 3.0.x 和 JSF 1.2。支持 bean 由 Spring 管理。
背景:即使没有登录也会创建会话。我的会话范围 bean 包含最初设置为默认值的设置。登录后,我想将会话状态更新为该特定用户存储在数据库中的首选项。为了实现这一点,我设想了一个接口,甚至更简单的注释(例如@PostLogin
)方法,但到目前为止我还没有找到类似的东西。
如果在每次主体更改时都调用该方法,即在注销时也可以调用该方法。如果整个 bean 在登录时被破坏并重新创建,这也是可以接受的,尽管我的其他会话范围的 bean 应该仍然存在。
到目前为止我发现的是:
ApplicationListener:监听器显然需要应用程序范围,我无法访问其中的会话范围 bean。@Autowired
加上范围代理不起作用。注入的对象坏了;它不包含其依赖项,尽管真正的支持 bean 包含。
【问题讨论】:
【参考方案1】:回答我自己的问题:
ApplicationListener
是正确的轨道,但 @Autowired
不是。
我使用一种方法定义了一个接口,该方法由我的会话范围 bean 实现。然后(单例范围的)事件侦听器类使用 ApplicationContext.getBeansOfType(..)
通过该接口查找会话 bean 并在每个会话 bean 上调用接口的方法。
【讨论】:
以上是关于Spring 安全性和 JSF:在登录时调用支持 bean 的方法?的主要内容,如果未能解决你的问题,请参考以下文章
具有 Spring 安全性的 JSF - 登录后重定向到指定页面