JSF身份验证和授权

14
如何为JSF Web应用程序实现身份验证和授权是最佳方法?最好仍然使用基于容器的安全性,因为我需要调用需要主体的EJB。

我意识到基于表单的身份验证在JSF中是一个主要的难点,但我是否可以使用PhaseListener或类似的东西以编程方式登录来验证用户?

还有其他方法吗?


你能告诉我们你选择了什么吗? - David Rabinowitz
相关链接:https://dev59.com/8XE95IYBdhLWcg3wrP0o#2207147 和 https://dev59.com/cVfUa4cB1Zd3GeqPK8Kw#6189810 - BalusC
4个回答

4

请查看使用JAAS和JSF的博客,这是一个关于如何使用JAAS和JSF进行认证和授权的示例。

希望能对您有所帮助。

Tiger


谢谢提供链接。不过我还有一些不确定的地方。我假设这会替代基于表单的身份验证,但它如何与我的JAAS登录模块(在Glassfish中是一个领域)交互呢?我正在使用JDBC领域。此外,相比ActionListener,PhaseListener是否更适合这个任务? - Zecrates
@Tiger:你想谈一下什么时候从基于容器的安全性转移到像Shiro或其他替代方案吗?在这里可以看到更专注的问题:https://dev59.com/VWsz5IYBdhLWcg3wmpFb - Rajat Gupta

3

您可以使用Spring Security框架,详细说明请参见这里


谢谢您的建议。Spring Security可以在Spring框架之外使用吗?目前我正在使用直接的JSF和Facelets,我想避免对Spring的额外依赖。 - Zecrates
它取决于几个Spring模块 - web、core和其他几个(例如jdbc,如果你将用户数据存储在数据库中)。但是,您不必基于Spring构建应用程序,只需将其视为外部库。 - David Rabinowitz
@David:你好,David,你想说说什么时候从基于容器的安全性转移到像Spring Security或其他替代方案更好吗?在这里查看更专注的问题:https://dev59.com/VWsz5IYBdhLWcg3wmpFb - Rajat Gupta
1
@Marcos 我想这主要取决于你的需求(认证的复杂程度),容器配置的简易程度以及是否可以添加第三方认证库,但在某些情况下可能不适用(例如IT应用程序)。我们的应用程序使用Web表单对站点的部分进行用户身份验证,使用移动Web页面的HTTP基本身份验证,并为移动API(如AWS自定义标头)使用自定义身份验证标头和格式,因此我们需要一个灵活的解决方案。此外,由于我们遇到了许多问题,现在我们只是一个Spring Web应用程序,没有JSF。 - David Rabinowitz

3
我使用JSF Seam,并使用Seam内置的身份验证和授权,发现它非常容易使用。对于身份验证,您只需实现一个方法,public boolean login(String username, String password) { ... }并返回布尔值。然后,您可以将页面标记为“需要登录”,seam会处理剩余部分。对于授权,Seam给您提供了一个@Restrict注释,您可以将其放在控制器或服务方法上,然后Seam会处理其余部分。高级授权:您还可以处理更多使用Seam进行高级授权, 其中角色是动态的 - 例如,在公告板中,您是一些帖子的“作者”,但是其他帖子的“读者”,只需将@Restrict注释委托给Java方法即可。我鼓励您查看Seam。Seam只是在JSF之上的一层,因此从技术上讲,您仍将在JSF上运行。如果由于某种原因您无法使用Seam,也许您可以借鉴Seam如何处理JSF中的授权和身份验证的一些思路。

2
您可以使用Servlet 3.0 HttpServletRequest API,就像在这个回答中展示的那样,来解决JSF 2.0问题:JSF 2.0简单登录页面

这不是JSF 2的一部分,而是Servlet 3.0的一部分。因此,只有在Tomcat 7、Glassfish 3、JBoss AS 6等或更新版本上运行JSF 1.x/2.x/任何版本时才有效。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接