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 - 登录后重定向到指定页面

jsf spring安全访问被拒绝认证登录

jsf spring安全用户信息

javascript在启动时调用托管bean的方法,而不是在命令按钮单击时调用它们

在页面加载时调用 JSF 托管 bean 操作

通过 JSF 表单成功登录后 Spring Security 不会重定向到登录页面