JSF 2.0 上用户身份验证的最佳实践?

Posted

技术标签:

【中文标题】JSF 2.0 上用户身份验证的最佳实践?【英文标题】:Best practice for the user authentication on JSF 2.0? 【发布时间】:2011-01-19 14:44:19 【问题描述】:

我正在寻找如何在我的 JSF Web 项目中进行用户身份验证的最佳方式。我在 stockoverflow 上找到了来自 BalusC 的 this 非常好的示例(顺便说一句,谢谢 BalusC)。但我不明白这个系统。

我已经写了一个注册页面。注册后,用户进入我的数据库。但是谁可以使用 j_security_check 从我的数据库中检查用户?

在我的 web 项目中,我没有面向用户和非用户的网站。当用户登录后,他可以看到更多选项,例如他可以发布文本。我可以检查谁?我可以在登录时使用用户数据保存用户类并检查:

if(user != null)
 <h:inputText value="User Only Text" id="text"  />

但我认为这种方式不是很优雅。另外我的问题是让用户登录并在网页上向有效用户显示比非用户更多选项的最佳方法是什么。

谢谢你,对不起我的英语不好。

【问题讨论】:

【参考方案1】:

但是如何使用 j_security_check 从我的数据库中检查用户?

article 解释了如何在 Glassfish 中将基于 HTTP FORM 的身份验证与 JDBC 领域结合使用。

让用户登录并在网页上向有效用户显示比非用户更多选项的最佳方式是什么。

基本上,您需要检查用户是否具有适当的角色才能看到“选项”。看看ExternalContext#isUserInRole(String)

【讨论】:

@Pascal:您想谈谈什么时候从基于容器的安全性转移到 shiro 或其他替代方案是好的?在此处查看更多重点问题:***.com/questions/7782720/…【参考方案2】:

只需将user 声明为会话范围的托管bean 并使用组件的rendered 属性。

<h:inputText value="User Only Text" id="text" rendered="#user != null" />

【讨论】:

我怎么说用户类在登录后被加载到会话范围内? 要么使用带有login() 方法和user 属性的UserManager 会话bean,以便您可以使用#userManager.user != null,或者在bean 的登录方法中使用externalContext.getSessionMap().put("user", user) 感谢您的详细解答。我会试试这个。

以上是关于JSF 2.0 上用户身份验证的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

平均堆栈身份验证 - 最佳实践

存储 oauth 和本地身份验证方法的最佳实践?

Vaadin 身份验证最佳实践

在 C# Web api 上进行用户身份验证的最佳实践是啥?

在微服务架构中组织授权的最佳实践?

移动设备的最佳实践身份验证