繁体   English   中英

JSF身份验证

[英]JSF Authentication

我正在开发一个Java EE应用程序(JSF2 + richfaces + Facelets + Tomcat)。 使用JSF时执行身份验证的最佳方法是什么? 或者我应该自己做?

人们通常选择(没有特定的顺序):

JAAS(这是Java / Java EE默认安全框架)
春季安全
定制安全

我从来没有使用过Spring Security,但文档很庞大,因为时间的限制,我放弃了尝试一次。 JAAS具有简单的优点,可以与Tomcat一起开箱即用。

我已经看到了在JAAS之上构建的自定义安全性。

您真正需要做的是弄清楚您的应用程序中特别需要的内容,并检查哪些框架更适合您的需求。

在不了解您的业务需求的情况下,如果您只需要身份验证(用户登录),我会说JAAS是最简单的方法,因为它不是应用程序侵入性的,如果您还没有使用它,则不需要添加Spring依赖项。

我认为Leonardo正确回答了这个问题,但您也可以考虑使用中央身份验证服务(CAS)来实现企业范围的安全性。 配置起来有点复杂,但好处是巨大的。 它还支持从LDAP到NTLM的大量开箱即用的身份验证机制。 CAS还提供自定义身份验证的扩展。

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

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

集成弹簧安全性的链接此链接提供了如何将spring与jsf1.2集成的代码。

您可以尝试Apache Shiro,它提供身份验证,授权和许多其他功能。

JBoss Seam非常好地集成了EJB 3,Facelets,JSF和hibernate。 还提供数据验证和一些安全性的东西。 如果你使用它的所有功能,它真的很甜。 如果你试图从中选择某些东西,那么它仍然很酷,但你有一些解决方法。 但到目前为止,我对Seam的看法给我留下了深刻的印象。

对于简单身份验证,一种非常简单的方法是使用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>

优点:零依赖关系和零配置,如果会话过期,登录后,用户将返回到他所在的原始页面。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM