Java EE 7 表单认证

8
我目前正在开发一个基于Java EE 7、PostgreSQL和应用服务器GlassFish 4的Web应用程序。我需要实现基于表单的身份验证,并保护一些URL,其中:
  • 用户和角色/组(无论它们被称为什么)存储在数据库中。
  • 我希望我的应用程序尽可能地“标准”(即,我当前使用JSF和JPA,没有像Spring、Struts等其他框架)。
经过一些研究,我发现Java EE提供了一种名为JASPIC的标准身份验证机制。因此,我将重点放在了JASPIC上,并阅读了多个Stackoverflow Q/A以及Arjan Tijms撰写的文章(几乎不可能找到与Java EE相关的Stackoverflow Q/A而没有他的答案或评论,顺便感谢他): 我的问题是:JASPIC是否允许我做我需要的事情(表单身份验证+带有角色的URL限制),并且使用它是否值得努力?
我的意思是:使用另一种机制可能更安全、更容易。
Arjan Tijms还说,无论是否使用JASPIC都是“一种鸡和蛋的问题”,如果JASPIC是安全的(它不会比解决的问题更多地创建问题),那么无论我需要编写多少代码,我真的想成为“第一只鸡”。

2
安全是为了增加安全性,而不是强制执行它。您的系统运行环境中最薄弱的环节往往是人类。在我诚实的看法中,您需要知道的一切都在您发布的第一个(精彩)链接中。顺便说一句,感谢您分享这些内容。除此之外,还有关于安全的JEE教程页面:http://docs.oracle.com/javaee/6/tutorial/doc/gkbaa.html - Gimby
3个回答

3
我正在使用JASPIC进行身份验证,但是JASPIC有一个限制需要注意(如果您想要标准化)。 您只能使用Java EE 7 API以外的依赖项。 这意味着访问需要驱动程序的JDBC资源不是明确规定的功能。
在我的OpenID Connect实现中,我使用Google作为我的安全存储,这也向我呈现了Google登录表单。 但那是使用JASPIC的更大的示例。
对于您自己,您可以将EJB公开到全局命名空间,并使用InitialContext获取EJB。 在此过程中,会有一些代码重复,因为您必须将EJB远程接口代码复制到两个位置,并确保两者的serialVersionIDs相同。 可以使用EJB连接到JPA资源以获取授权数据。
请使用EJB,因为您可能会考虑的另外两个选项是REST和SOAP,这将在您的Web端口上公开某些内容,并需要一些额外的配置以防止未经授权的访问或要求将它们放置在不同的系统上。

如果您想学习的话,我创建了一个简单的JASPIC实现,即HTTP Header JASPIC module,旨在与像SiteMinder这样更复杂的系统集成。


那个示例实现太棒了! :) - Mike Braun

-4

我不了解JASPIC,但我可以建议您看一下shiro框架

它让您基于您的帖子进行最小配置,就可以完成几乎所有您需要做的事情。


1
通常情况下,我会避免使用像Shiro这样的框架,除非我打算仅在Web层控制整个应用程序的身份验证/授权。主要是因为目标平台不支持整个Java EE堆栈。 - Archimedes Trajano

-4

针对基于表单的身份验证和授权,您需要使用JAAS。请访问以下网址 - linK


1
在Java EE中,事情要更加微妙,你应该看看这篇文章。链接 - bdulac

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