JSF 认证和授权
Posted
技术标签:
【中文标题】JSF 认证和授权【英文标题】:JSF authentication and authorization 【发布时间】:2010-11-14 08:22:28 【问题描述】:为 JSF Web 应用程序实现身份验证和授权的最佳方法是什么?最好我仍然想使用基于容器的安全性,因为我需要调用需要主体的 EJB。
我意识到基于表单的身份验证是 JSF 的一大难题,但我是否可以使用 PhaseListener 或类似的东西以及编程登录来验证用户身份?
还有什么其他方法值得我看看?
【问题讨论】:
你能告诉我们你的选择吗? 相关:***.com/questions/2206911/… 和 ***.com/questions/6189536/… 【参考方案1】:尝试查看using JAAS with JSF. 的博客 这是如何使用 JSF 部署 JAAS 以进行身份验证和授权的示例。
希望对你有帮助。
老虎
【讨论】:
感谢您的链接。然而,我不确定一些事情。我假设这将取代基于表单的身份验证,但它如何与我的 JAAS 登录模块(在 Glassfish 中的领域)交互。我正在使用 JDBC 领域。另外,PhaseListener 不是比 ActionListener 更适合这个吗? @Tiger:您想谈谈什么时候从基于容器的安全性转移到 shiro 或其他替代方案是好的?在此处查看更多重点问题:***.com/questions/7782720/…【参考方案2】:您可以使用 Spring Security 框架,请参阅此处的说明http://ocpsoft.com/java/acegi-spring-security-jsf-login-page/
【讨论】:
感谢您的建议。 Spring Security 可以在 Spring Framework 之外使用吗?目前我有直接的带有 Facelets 的 JSF,我想避免对 Spring 的额外依赖。 它依赖于几个 spring 模块——web、core 和其他几个模块(例如 jdbc,如果你将用户数据保存在数据库中)。但是,您不必将应用程序基于 Spring,只需将其视为外部库即可。 @David:嗨,David,您想谈谈什么时候从基于容器的安全性转移到 spring 安全性或其他替代方案比较好?在此处查看更多重点问题:***.com/questions/7782720/… @Marcos 我想这在很大程度上取决于您的需求(您的身份验证有多复杂)、容器配置的简单程度以及您是否可以添加第 3 方身份验证库,在某些情况下可能并非如此场景(以 IT 应用为例)。我们的应用程序让用户使用 Web 表单对网站的某些部分进行身份验证,HTTP basic 用于移动网页,自定义身份验证标头和移动 API 格式(如 AWS 自定义标头),因此我们需要一个灵活的解决方案。此外,到目前为止,我们只是 Spring 的 Web 应用程序,由于我们遇到的许多问题,没有 JSF 存在。【参考方案3】:我使用 JSF Seam,并且使用过 Seam 的内置身份验证和授权,发现它非常好用。
对于身份验证,您只需实现 1 个方法 public boolean login(String username, a String password) ...
并返回布尔值。然后,您可以将页面标记为“需要登录”,其余的由 seam 处理。
对于授权,Seam 为您提供了一个 @Restrict
注释,您可以将其放在您的 Controller 或 Service 方法上,Seam 会再次处理其余的事情。
高级授权:您还可以处理更多advanced authorization with Seam,其中角色是动态的 - 例如。在公告板上,您是某些帖子的“作者”,但您是“读者”或其他帖子的“作者”,只需将您的 @Restrict 注释委托给 Java 方法即可。
我建议您看看 Seam。 Seam 只是 JSF 之上的一个层,所以从技术上讲,您仍然可以在 JSF 上运行。如果由于某种原因你不能使用 Seam,也许你可以借鉴一下 Seam 如何处理 JSF 中的授权和身份验证的一些想法。
【讨论】:
【参考方案4】:您可以使用 Servlet 3.0 HttpServletRequest API,如对 JSF 2.0 问题的回答所示:
JSF 2.0 Simple login page
【讨论】:
这不是 JSF 2 的一部分。这是 Servlet 3.0 的一部分。所以这只适用于在 Tomcat 7、Glassfish 3、JBoss AS 6 等或更高版本上运行 JSF 1.x/2.x/whatever 时。以上是关于JSF 认证和授权的主要内容,如果未能解决你的问题,请参考以下文章