【问题标题】:Java EE 7 Form based authenticationJava EE 7 基于表单的身份验证
【发布时间】:2014-06-09 13:02:17
【问题描述】:

我目前正在开发基于 Java EE 7、PostgreSQL 和应用服务器 GlassFish 4 的 Web 应用程序。 我需要实现基于表单的身份验证,并确保某些 URL 的安全:

  • 用户和角色/组(无论它们叫​​什么)都存储在数据库中。
  • 我希望我的应用程序尽可能“标准”(即我目前使用的是 JSF 和 JPA,没有其他框架,如 spring、struts ...)

经过一番研究,我发现 Java EE 提供了一种标准的身份验证机制,称为 JASPIC。因此,我将研究重点放在 JASPIC 上,并阅读了多篇 Stackoverflow Q/A 以及 Arjan Tijms 撰写的那些文章(如果没有他的答案或 cmets,几乎不可能找到与 Java EE 相关的 Stackoverflow Q/A,感谢他方式):

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

Arjan Tijms 还表示,无论使用 JASPIC 是否是“一种先有鸡还是先有蛋的问题”,以及 JASPIC 是否可以安全使用(它不会产生比它解决的问题更多的问题),无论使用多少我需要写的代码,我真的很想成为“第一只鸡”。

【问题讨论】:

  • 安全是为了提高安全性,而不是强制执行。您的安全取决于系统运行时环境中最薄弱的环节,通常最薄弱的环节是人。老实说,您下定决心所需知道的一切都在您发布的第一个(精彩)链接中。感谢您顺便分享这些。除此之外,还有关于安全的 JEE 教程页面:docs.oracle.com/javaee/6/tutorial/doc/gkbaa.html

标签: java jakarta-ee authentication standards jaspic


【解决方案1】:

我不知道 JASPIC 但我建议你看看shiro framework

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

【讨论】:

  • 我通常避免使用像 Shiro 这样的框架,除非我打算只在 Web 层中控制整个应用程序的身份验证/授权。主要是因为目标平台不支持整个 Java EE 堆栈。
【解决方案2】:

对于基于表单的身份验证和授权,您需要 JAAS。通过以下网址- linK

【讨论】:

  • Java EE 中有些东西比较微妙,你应该看看this post
【解决方案3】:

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

在我的OpenID Connect implementation 中,我使用 Google 作为我的安全存储,它还为我提供了 Google 登录表单。这是使用 JASPIC 的一个更大的例子。

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

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

如果您想学习,我创建的一个简单 JASPIC 实现是 HTTP Header JASPIC module,它旨在与更复杂的系统(如 SiteMinder)集成。

【讨论】:

  • 该示例实现非常棒! :)
猜你喜欢
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 2012-06-06
相关资源
最近更新 更多