JAAS为人类

我很难理解JAAS。 这似乎比它应该更复杂(尤其是太阳教程)。 我需要一个简单的教程或例子来说明如何在基于Struts + Spring + Hibernate的java应用程序中使用自定义用户资源库来实现安全性(authentication+授权)。 可以用ACEGI来实现。

其他用户提供了一些非常有用的链接,所以我不打算链接。 我在Web应用程序的JAAS中做了类似的研究,并且遇到了一个“头脑障碍”,直到我终于意识到JAAS是一个框架,在Java世界的不同“层”上处理web应用程序的安全性。 它旨在解决Java SE而不是Java EE中的安全问题。

JAAS是一个安全框架,用于保护networking应用程序的安全。 这些东西的一些例子是在JVM级别可用的代码和资源,因此所有这些在JVM级别设置策略文件的能力。

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

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

总而言之,除非您希望保护Java SE级别(类,系统资源)中的资源,否则除了使用公共类和接口之外,我没有看到任何实际的JAAS使用。 只关注使用Spring Security或简单的旧Java EE安全性,这两者都解决了许多常见的Web应用程序安全问题。

javax.security是非常复杂的API。 因此,不仅有LoginModules的实现者,而且还有完整的身份validation和授权api,它们创build了上面的抽象层,如身份validation和授权pipe理器。

对于初学者来说,把它打印到你的记忆里是很好的。

其次,JAAS的最简单的设置和去库是Jboss PicketBox 。 它说如何通过JBossAuthenticationManager和JBossAuthorizationManager进行身份validation和授权…通过XML或注释可以轻松configuration。 您可以使用它来pipe理webapps和独立的应用程序。

如果您需要授权部分来pipe理存储库访问,那么就ACL而言,这是您正在查找的内容。

安全性问题是,通常你需要根据你的需要定制它,所以你最终可能会实现:

LoginModule – validation用户名和密码

CallbackHandler就像这个new LoginContext("Sample", new MyCallbackHandler());

CallbackHandler被传递给底层的LoginModule,以便它们可以与用户进行通信和交互 – 例如,通过graphics用户界面提示input用户名和密码。 所以在Handler里面,你可以从用户那里得到用户名和密码,并把它传递给LoginModule。

LoginContext – 然后你只需要调用lc.login(); 并validation凭据。 LoginContext被authentication的Subject填充。

但是,除非你需要特定的东西,否则Jbos​​s picketbox给你一个非常简单的方法。

lsiu的回答是在这里真正“得到它”的答案之一;)

除了这个答案之外,关于这个话题的一个很好的参考是JAAS发生了什么? 。

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

来自同一作者的是企业中的JAAS ,这是一篇较老的文章,但提供了很多关于Java SE(JAAS)和Java EE模型为什么分歧的历史背景。

总体而言,JAAS中的一些types直接用于Java EE,基本上是PrincipalSubjectCallbackHandler 。 后两者主要由JASPIC使用。 我已经在JASPIC的文章“ 用Java EE实现容器authentication”中解释了JASPIC 。

我不能说JAAS本身太多,但是这个关于Spring Security的“build议步骤”指南和参考手册在Spring Security上都是相当不错的资源 – 如果你的设置接近简单,你并不需要做比阅读这些更多。

对于纯粹的JAAS教程来看看这个 。 这是旧的,但应该帮助JAAS的基本知识。