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

其他提示

其他用户提供了一些非常有用的链接,所以我不打算使用链接。我在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应用程序安全问题。

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

对于初学者来说,打印是很好的选择 进入你的记忆。

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

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

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

登录模块 - 验证用户名+密码

回调处理程序 像这样使用 new LoginContext("Sample", new MyCallbackHandler());

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

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

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

lsiu的回答是这里的几个答案之一,真的“得到它”。 ;)

除此之外,无论发生在JAAS上的是什么?

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

来自同一作者的是企业中的JAAS ,这是一篇较旧的文章但是为Java SE(JAAS)和Java EE模型分散原因提供了很多历史背景。

总体而言,JAAS中的一些类型直接在Java EE中使用,基本上是 Principal Subject CallbackHandler 。后两者主要由JASPIC使用。我在文章在Java EE中实现容器身份验证中解释了JASPIC JASPIC

我不能对JAAS本身说太多话,但这个 “建议的步骤”关于Spring Security的指南参考手册都是关于Spring Security的相当不错的资源 - 如果您的设置接近简单,那么除了阅读这些内容之外,您不需要做更多的事情。

对于纯粹的JAAS教程,请查看。它已经过时但应该有助于JAAS的基础知识。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top