84

我很难理解 JAAS。这一切似乎都比应有的复杂(尤其是 Sun 教程)。我需要一个简单的教程或示例,说明如何在基于 Struts + Spring + Hibernate 和自定义用户存储库的 java 应用程序中实现安全性(身份验证 + 授权)。可以使用 ACEGI 来实现。

4

6 回答 6

51

其他用户在上面提供了一些非常有用的链接,所以我不打算为链接而烦恼。我在 JAAS 中针对 Web 应用程序进行了类似的研究,并且遇到了“思维障碍”,直到我最终意识到 JAAS 是一个框架,它在与 Java World 中的 Web 应用程序不同的“层”处理安全性。它旨在解决 Java SE 而不是 Java EE 中的安全问题。

JAAS 是一个安全框架,用于在比 Web 应用程序低得多的级别保护事物。其中一些示例是 JVM 级别可用的代码和资源,因此所有这些都可以在 JVM 级别设置策略文件。

但是,由于 Java EE 是在 Java SE 之上构建的,因此一些来自 JAAS 的模块在 Java EE 安全性中被重用,例如 LoginModules 和 Callbacks。

请注意,除了 Java EE 安全性之外,还有 Spring 安全性(以前称为 Acegi),它与本机 Java EE 安全性类似,解决了 Web 应用程序安全问题中更高的“层”。它是一个单独的安全实现,并非建立在标准 Java EE 安全之上,尽管它在许多方面的行为相似。

总而言之,除非您希望保护 Java SE 级别的资源(类、系统资源),否则除了使用公共类和接口之外,我看不到 JAAS 的任何实际用途。只需专注于使用 Spring Security 或普通的旧 Java EE 安全性,它们都解决了许多常见的 Web 应用程序安全问题。

于 2009-03-29T15:37:04.427 回答
11

javax.security 是恕我直言过于复杂的 API。因此,不仅有 LoginModules 的实现者,还有整个身份验证和授权 api 的实现者,它们在上面创建抽象层,如身份验证和授权管理器。

对于初学者,最好将其打印您的记忆中。

其次,恕我直言,JAAS 最简单的设置和运行库是 Jboss PicketBox。它说明了如何通过 JBossAuthenticationManager 和 JBossAuthorizationManager 进行身份验证和授权......通过 XML 或注释轻松配置。您可以使用它来管理 webapps 和独立应用程序。

如果您需要授权部分来管理存储库访问,就资源的 ACL 而言,这就是您要确定的。

安全性的问题是,通常您需要根据自己的需要对其进行自定义,因此您最终可能会实现:

LoginModule - 验证用户名 + 密码

CallbackHandler是这样使用的new LoginContext("Sample", new MyCallbackHandler());

CallbackHandler 被传递给底层的 LoginModules,因此它们可以与用户进行通信和交互——例如,通过图形用户界面提示输入用户名和密码。因此,在处理程序内部,您从用户那里获取用户名和密码,并将其传递给 LoginModule。

LoginContext - 然后你只需调用 lc.login(); 并验证凭据。LoginContext 填充有经过身份验证的主题。

然而,Jboss Picketbox 为您提供了一个非常简单的方法,除非您需要特定的东西。

于 2011-06-21T09:49:59.213 回答
8

lsiu 的答案是这里为数不多的真正“明白”的答案之一;)

除了这个答案之外,关于这个主题的一个非常好的参考是JAAS 发生了什么?.

它解释了 JASPIC 如何成为 Java EE 中 Servlet 和 EJB 安全模型以及潜在的 JAAS 登录模块之间的链接,但在许多情况下,JAAS 的角色被简化为 Java EE 中相对简单的用户名和角色提供者。

来自同一作者的是JAAS in the Enterprise,这是一篇较早的文章,但提供了很多关于 Java SE (JAAS) 和 Java EE 模型为何如此不同的历史背景。

总的来说,JAAS 中的一些类型直接用于 Java EE,基本上Principal是 、SubjectCallbackHandler. 后两者主要由 JASPIC 使用。我在使用 JASPIC 在 Java EE 中实现容器身份验证一文中解释了 JASPIC

于 2013-05-03T22:11:13.197 回答
2

我不能对 JAAS 本身说太多,但是这个关于 Spring Security 的“建议步骤”指南参考手册都是关于 Spring Security 的很好的资源——如果你的设置很简单,你真的不需要做的远不止阅读这些。

于 2009-03-09T23:58:33.780 回答
1

对于纯粹的 JAAS 教程,请查看. 它很旧,但应该有助于 JAAS 基础知识。

于 2009-03-09T23:31:00.443 回答