JavaEE7基于表单的身份验证

JavaEE7基于表单的身份验证,java,jakarta-ee,authentication,standards,jaspic,Java,Jakarta Ee,Authentication,Standards,Jaspic,我目前正在开发一个基于JavaEE7、PostgreSQL和应用服务器GlassFish 4的web应用程序。 我需要实现基于表单的身份验证,并确保某些URL的安全,因为我知道: 用户和角色/组(无论它们被称为什么)都存储在数据库中 我希望我的应用程序尽可能“标准化”(也就是说,我目前使用的是JSF和JPA,没有其他框架像spring、struts……) 经过一些研究,我发现JavaEE提供了一种称为JASPIC的标准身份验证机制。因此,我将研究重点放在JASPIC上,阅读了多篇Stacko

我目前正在开发一个基于JavaEE7、PostgreSQL和应用服务器GlassFish 4的web应用程序。 我需要实现基于表单的身份验证,并确保某些URL的安全,因为我知道:

  • 用户和角色/组(无论它们被称为什么)都存储在数据库中
  • 我希望我的应用程序尽可能“标准化”(也就是说,我目前使用的是JSF和JPA,没有其他框架像spring、struts……)
经过一些研究,我发现JavaEE提供了一种称为JASPIC的标准身份验证机制。因此,我将研究重点放在JASPIC上,阅读了多篇Stackoverflow Q/A和Arjan Tijms撰写的文章(顺便说一句,多亏了他,如果没有他的回答或评论,几乎不可能找到与Java EE相关的Stackoverflow Q/A):

我的问题是:JASPIC是否允许我做我需要的事情(表单身份验证+角色的URL限制)以及是否值得使用它? 我的意思是:使用另一种机制可能更安全、更容易


Arjan Tijms还说,无论是否使用JASPIC都是“一种鸡和蛋的问题”,如果JASPIC可以安全使用(它不会产生比它解决的问题更多的问题),无论我需要编写多少代码,我都真的想成为“第一批鸡之一”。

我不知道JASPIC,但我可以建议您看看


它让您可以根据帖子以最少的配置完成几乎所有需要的工作。

对于基于表单的身份验证和授权,您需要JAAS。浏览下列网址-

我正在使用JASPIC进行身份验证,但是JASPIC有一个限制,您需要克服(如果您想要标准的东西)。您仅限于在JavaEE7API之外没有依赖项。这意味着访问需要驱动程序的JDBC资源不是标准中明确规定的功能

在我的博客中,我使用谷歌作为我的安全商店,这也给了我谷歌登录表单。这是使用JASPIC的一个更大的例子

对于您自己,您可以将EJB公开到全局名称空间,并使用InitialContext获取EJB。会有一些代码重复,因为您必须在两个位置复制EJB远程接口代码,并确保两个位置上的SerialVersionID相同。EJB可用于连接到JPA资源以获取授权数据

使用EJB,因为您可能想到的其他两个选项是REST和SOAP,它们将在web端口上公开某些内容,并且需要一些额外的配置来防止未经授权的访问,或者需要将它们放置在不同的系统上


我创建了一个简单的JASPIC实现,用于与更复杂的系统(如SiteMinder)集成。安全是为了提高安全性,而不是强制执行。您的安全性仅与系统运行时环境中最薄弱的环节相同,通常最薄弱的环节是人。在我看来,你需要知道的所有事情都在你发布的第一个链接中。谢谢你的分享。除此之外,还有关于安全性的JEE教程页面:该示例实现非常出色!:)我通常避免使用Shiro之类的框架,除非我计划只在web层控制整个应用程序的身份验证/授权。主要是因为目标平台不支持整个JavaEE堆栈。