我很难理解JAAS.这一切似乎都应该比它应该更复杂(尤其是Sun教程).我需要一个简单的教程或示例,介绍如何在基于Struts + Spring + Hibernate和自定义用户存储库的Java应用程序中实现安全性(身份验证+授权).可以使用ACEGI实现.
其他用户提供了一些非常有用的链接,所以我不打扰链接.我在JAAS中进行了类似的Web应用程序研究,并且遇到了"思路障碍",直到我最终意识到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应用程序安全问题.
以下是我用来帮助理解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/
http://roneiv.wordpress.com/2008/02/18/jaas-authentication-mechanism-is-it-possible-to-force-j_security_check-to-go-to-a-specific-page/
另外看看Apache tomcat领域的配置方法:
http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html
javax.security是imho过于复杂的API.因此,不仅有LoginModules,还有整个身份验证和授权api的实现者,它们创建了上面的抽象层,如身份验证和授权管理器.
对于初学者来说,这是好事,打印本到你的记忆.
其次,对于JAAS来说,最简单的设置和去库是Jboss PicketBox.它说如何通过JBossAuthenticationManager和JBossAuthorizationManager进行身份验证和授权......可以通过XML或Annotations轻松配置.您可以使用它来管理Web应用程序和独立应用程序.
如果您需要用于管理存储库访问的授权部分,就资源的ACL而言,这是您正在寻找的.
安全性问题是,通常您需要根据需要对其进行自定义,因此您最终可能会实施:
LoginModule - 验证userName + Password
CallbackHandler就像这样使用new LoginContext("Sample", new MyCallbackHandler());
CallbackHandler被传递给底层的LoginModule,因此它们可以与用户进行通信和交互 - 例如,通过图形用户界面提示输入用户名和密码.因此,在Handler内部,您可以从用户那里获得用户名和密码,并将其传递给LoginModule.
LoginContext - 然后你只需要调用lc.login(); 并验证凭据.LoginContext使用经过身份验证的Subject进行填充.
然而,Jboss picketbox为您提供了一个非常简单的方法,除非您需要特定的东西.
lsiu的回答是这里的几个答案之一,真的"得到它";)
除了这个答案之外,关于这个主题的一个非常好的参考是JAAS发生了什么?.
它解释了JASPIC是Servlet和EJB安全模型之间Java EE中的链接,以及可能是JAAS登录模块,但在许多情况下,JAAS的角色被简化为Java EE中相对简单的用户名和角色提供者的角色.
来自同一作者的是企业中的JAAS,这是一篇较旧的文章,但提供了很多历史背景,说明为什么Java SE(JAAS)和Java EE模型与他们的方式不同.
总体但也有少数种类从JAAS Java EE中直接使用,基本上Principal
,Subject
和CallbackHandler
.后两者主要由JASPIC使用.我在使用JASPIC在Java EE中实现容器认证的文章中解释了JASPIC.