15

我目前正在使用 Oracle ADF(它是一个端到端的 Java EE 框架)来构建我的 Web 应用程序,并使用 GlassFish 3.1 作为应用程序服务器。

后者支持JAAS(在其管理控制台中声明)。因此,我创建了一个安全领域并将它们映射到配置文件中声明的角色,并使用 JAAS 来实现授权和身份验证安全功能。一切都很好,直到现在!过去几周我一直在研究 Java EE 安全性。

我发现,如果您坚持“基本”安全,那么 JAAS 就足够了。此外,似乎 JAAS(作为 Java 安全框架的一部分)仅适用于 Java SE(但由于 Java EE 是基于 Java SE 构建的,因此它的一些模块正在被重用,例如 LoginMethod 和 Callbacks)。

然后,我发现了很多关于JASPIC的帖子,发现它只能通过编程方式实现(不是问题)并且尚未得到应用服务器供应商的完全支持,并试图在两者之间进行比较。即使JASPIC1.1版本已经解决了一些问题,例如:

然而,容器不会完全记住身份验证。SAM 仍然在每次请求时被调用,并且 SAM 仍然需要重新认证

(对我来说听起来不太好)。

然后,我继续寻找集成一些安全框架。最著名的似乎是“春天”“白”。当然,他们每个人都有自己的特点(可能第一个更适合特定情况,而第二个更适合另一种情况)。对我来说更重要的是:

  • 验证
  • 授权
  • 会话管理(可能还有加密)

但是,我到处都发现了相互矛盾的结论。结果:我现在比搜索之前更困惑。

我只是安全等主题的新手,而且我是一名开发人员(我有一些东西要实现),所以很难跟上每个新版本的更新,而且安全方面的进展似乎每天都在飞速发展.

如果可能的话,我想要一些基于个人经验的事实。每一个提示或建议都值得赞赏。在采取实施步骤之前,我想确保自己有信心。

4

2 回答 2

8

JASPIC 是作为 Java EE 的一部分与之完美集成的一种技术。

JASPIC 身份验证模块不会自动记住会话这一事实也是一个优势,因为它也使它们也适用于无状态应用程序(想想 JAX-RS 等 API)。当您进行身份验证并确实想要会话时,只需将结果(用户名 + 组)放入会话中。然后在每个“validateRequest”方法开始时快速检查会话中是否有任何内容,如果有,请再次将它们提供给容器。无需从头开始进行身份验证,当然也无需记住任何密码!

Shiro 和 Spring Security 是功能非常齐全的框架。您几乎无法将其与非常低级和基本的 JASPIC 进行比较。Spring 和 Shiro 都没有与 Java EE 完美集成。人们常说 Spring Security 比 Shiro 更复杂。

希望这可以帮助

于 2014-12-16T09:36:05.230 回答
2

JASPIC 的 Servlet 配置文件要求在每个请求上调用已配置的(为应用程序)服务器身份验证模块 (SAM);正是为了使 SAM 能够管理身份验证会话(如果需要)

该配置文件还支持这种情况,其中 SAM 被配置为执行身份验证,但随后希望将身份验证会话管理委托给包含容器,该容器通过使用 registerSession 回调属性启用。

正如 Mike Braun 所指出的,该配置文件还支持身份验证会话的无状态模式,并与容器授权系统完全集成;这样当目标请求被授权约束(例如将在 web.xml 中定义或使用 ServletSecurity 注释)覆盖时,必须进行 JASPIC 身份验证。

JASPIC 定义的回调和容器提供的回调处理程序,允许便携式 SAM 设置容器调用者主体,查阅容器的用户注册表以进行密码验证和组分配等。

于 2015-01-02T22:32:45.000 回答