JSF身份验证

3

我正在开发一个Java EE应用程序(JSF2 + RichFaces + Facelets + Tomcat)。 在使用JSF时,最好的身份验证方法是什么? 还是我自己制作一个?


FYI:拼写为“authentication”,而不是“authentification”。 - Migol
重复的问题:https://dev59.com/fGkw5IYBdhLWcg3wVpFi - BalusC
7个回答

6

人们通常会在以下几个选择中挑选(没有特定的顺序):

JAAS(Java/Java EE默认安全框架)
Spring Security
自定义安全性

我从未使用过Spring Security,但文档非常庞大。由于时间限制,我放弃了尝试。JAAS具有简单易用和与Tomcat开箱即用的优点。

我也看到过基于JAAS构建的自定义安全性。

您真正需要做的是确定应用程序中需要什么,并检查哪些框架更适合您的需求。

如果您只需要身份验证(用户登录),而不需要更改应用程序,则我认为JAAS是最简单的方法,因为它不会对应用程序产生影响,如果您尚未使用Spring,则无需添加Spring依赖项。


1
请注意,JAAS本身并不是Java EE的默认安全框架。 JAAS是在Java SE中发现的安全基础,但它并没有详细说明它如何对应于Java EE安全概念,有时实际上是非常不同的。 有关更多详细信息,请参见:http://java.sys-con.com/node/1002315 - Arjan Tijms

3

我正在使用JSF 2,但这个项目是为JSF 1.2。 - mohamida

1

我认为Leonardo的回答是正确的,但您也可以考虑使用Central Authentication Service(CAS)来实现企业级安全。它配置起来可能会有些复杂,但好处是巨大的。它还支持从LDAP到NTLM等大量开箱即用的身份验证机制。CAS还提供了自定义身份验证的扩展。

如果您选择使用Java EE容器,并希望使用基于表单的身份验证,我已经发布了一些示例供JSF 1.2和2.0以及j_security_check使用。

此外,Servlet 3.0 API通过HttpServletRequest API提供基于容器的登录和身份验证。


0

对于简单的身份验证,一个非常简单的方法是使用JSTL在模板中检查有效的用户对象,如果没有,则显示登录表单。 例如,假设您的模板是webapp/WEB-INF/templates/default.xhtml,在模板内部:

<html...>
.
.
<h:body>
<c:if test="#{mbSecurity.validUser}">
.
. authenticated template sections goes here
.
</c:if>

<c:if test="#{not mbSecurity.validUser}">
   <ui:include src="/WEB-INF/inc/login-form.xhtml" />
</c:if>
</h:body>
</html>

优点:零依赖和零配置,而且如果会话过期,在登录后,用户将返回到原来的页面。


0
你可以尝试使用Apache Shiro,它提供了认证、授权等许多功能。

0

JBoss Seam 很好地集成了 EJB 3、Facelets、JSF 和 Hibernate。此外,它还提供了数据验证和一些安全性功能。如果您使用它的所有功能,它真的很棒。如果您只选择其中某些功能,那么它仍然很酷,但您需要一些解决方法。但是到目前为止,我对 Seam 所看到的印象非常好。


0
除了提到的框架外,还有 Seam Security,它通过扩展很好地与 CDI 集成。

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