我正在开发一个Java EE应用程序(JSF2 + RichFaces + Facelets + Tomcat)。 在使用JSF时,最好的身份验证方法是什么? 还是我自己制作一个?
我正在开发一个Java EE应用程序(JSF2 + RichFaces + Facelets + Tomcat)。 在使用JSF时,最好的身份验证方法是什么? 还是我自己制作一个?
人们通常会在以下几个选择中挑选(没有特定的顺序):
JAAS(Java/Java EE默认安全框架)
Spring Security
自定义安全性
我从未使用过Spring Security,但文档非常庞大。由于时间限制,我放弃了尝试。JAAS具有简单易用和与Tomcat开箱即用的优点。
我也看到过基于JAAS构建的自定义安全性。
您真正需要做的是确定应用程序中需要什么,并检查哪些框架更适合您的需求。
如果您只需要身份验证(用户登录),而不需要更改应用程序,则我认为JAAS是最简单的方法,因为它不会对应用程序产生影响,如果您尚未使用Spring,则无需添加Spring依赖项。
选择Spring Security来提高IT技术。
这里有一篇文章介绍如何将其与JSF集成
编辑:
http://ocpsoft.com/java/acegi-spring-security-jsf-login-page/
我认为Leonardo的回答是正确的,但您也可以考虑使用Central Authentication Service(CAS)来实现企业级安全。它配置起来可能会有些复杂,但好处是巨大的。它还支持从LDAP到NTLM等大量开箱即用的身份验证机制。CAS还提供了自定义身份验证的扩展。
如果您选择使用Java EE容器,并希望使用基于表单的身份验证,我已经发布了一些示例供JSF 1.2和2.0以及j_security_check使用。
此外,Servlet 3.0 API通过HttpServletRequest API提供基于容器的登录和身份验证。
对于简单的身份验证,一个非常简单的方法是使用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>
优点:零依赖和零配置,而且如果会话过期,在登录后,用户将返回到原来的页面。
JBoss Seam 很好地集成了 EJB 3、Facelets、JSF 和 Hibernate。此外,它还提供了数据验证和一些安全性功能。如果您使用它的所有功能,它真的很棒。如果您只选择其中某些功能,那么它仍然很酷,但您需要一些解决方法。但是到目前为止,我对 Seam 所看到的印象非常好。