我很难理解JAAS。一切似乎都比应有的要复杂(尤其是Sun教程)。我需要一个简单的教程或示例,说明如何在基于Struts + Spring + Hibernate的Java应用程序中使用自定义用户存储库实现安全性(身份验证+授权)。可以使用ACEGI实现。
我很难理解JAAS。一切似乎都比应有的要复杂(尤其是Sun教程)。我需要一个简单的教程或示例,说明如何在基于Struts + Spring + Hibernate的Java应用程序中使用自定义用户存储库实现安全性(身份验证+授权)。可以使用ACEGI实现。
Answers:
以下是一些我用来帮助理解JAAS的链接:
http://www.owasp.org/index.php/JAAS_Tomcat_Login_Module
http://www.javaworld.com/jw-09-2002/jw-0913-jaas.html
http://jaasbook.wordpress.com/
还可以查看Apache tomcat领域配置方法:
其他用户在上面提供了一些非常有用的链接,因此我不会打扰这些链接。我在用于Web应用程序的JAAS中进行了类似的研究,并且遇到了“障碍”,直到我最终意识到JAAS是一种解决Java世界中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是imho过于复杂的API。结果,不仅有LoginModules的实现者,还有整个身份验证和授权api的实现者,它们在上方创建了抽象层,例如Authentication&Authorization manager。
对于初学者来说,这是好事,打印本到你的记忆。
其次,imho对于JAAS来说,最简单的设置和运行库是Jboss PicketBox。它说明了如何通过JBossAuthenticationManager和JBossAuthorizationManager进行身份验证和授权...可以通过XML或注释轻松配置。您可以使用它来管理webapp和独立应用程序。
如果您需要授权部分来管理存储库访问,就资源的ACL而言,这就是您所需要的。
安全性的问题是,通常您需要根据需要对其进行自定义,因此您最终可能会实现:
LoginModule-验证用户名+密码
这样使用CallbackHandlernew LoginContext("Sample", new MyCallbackHandler());
CallbackHandler传递给底层的LoginModule,以便它们可以与用户通信和交互-例如,通过图形用户界面提示输入用户名和密码。因此,在Handler内部,您可以从user获取用户名和密码,并将其传递给LoginModule。
LoginContext-那么您只需调用lc.login(); 并验证凭据。LoginContext填充有经过身份验证的Subject。
但是,除非您需要某些特定的东西,否则Jboss Picketbox为您提供了一种非常简单的方法。
lsiu的答案是这里的几个真正“得到它”的答案之一;)
除了这个答案外,关于此主题的一个很好的参考是《 JAAS发生了什么?。
它解释了JASPIC如何成为Servlet和EJB安全模型以及潜在的JAAS登录模块之间的Java EE中的链接,但是在许多情况下,JAAS的角色被简化为Java EE中相对简单的用户名和角色提供者。
来自同一作者的是Enterprise中的JAAS,这是一篇较旧的文章,但是提供了许多关于Java SE(JAAS)和Java EE模型为何会分开的历史背景。
总体但也有少数种类从JAAS Java EE中直接使用,基本上Principal
,Subject
和CallbackHandler
。后两个主要由JASPIC使用。我已经在文章《使用JASPIC在Java EE中实现容器认证》中解释了JASPIC。