我目前正在使用Oracle ADF(这是一个端到端的Java EE框架)来构建我的Web应用程序和GlassFish 3.1作为应用程序服务器.
后者支持JAAS(在其管理控制台中声明).因此,我创建了一个安全领域,并使用配置文件中声明的角色映射它们,并使用JAAS实现授权和身份验证安全功能.一切都很好,直到现在!在过去的几周里,我一直在研究Java EE安全性.
我发现如果你坚持使用"基本"安全性,那么JAAS就足够了.此外,似乎JAAS(作为Java安全框架的一部分)仅适用于Java SE(但由于Java EE是基于Java SE构建的,因此其中一些模块正在被重用,例如LoginMethod和Callbacks).
然后,我发现很多关于JASPIC的帖子,发现它只能通过编程方式实现(不是问题),并且它还没有被app服务器供应商完全支持,并试图在两者之间进行比较.即使JASPIC1.1版本已经解决了一些问题,例如:
但是,容器不会完全记住身份验证.在每个请求仍然调用SAM,并且SAM仍然必须重新进行身份验证
(这对我来说听起来不太好).
然后,我继续寻找集成一些安全框架.最着名的似乎是"春天"和"四郎".当然,他们每个人都有自己的特点(可能第一个更适合特定情况,而第二个更适合另一个).对我来说更重要的是:
认证
授权
会话管理(可能还有加密)
但是,到处都发现了相互矛盾的结论.结果:在搜索之前我现在更加困惑.
我只是安全等主题的新手,而且我是一名开发人员(我有实施的东西),因此很难及时了解每一个新版本,安全方面的进展似乎每天都在继续.
如果可能的话,我想根据个人经验得出一些事实.每个提示或建议都表示赞赏.我想确保在采取实施步骤之前我有信心.
JASPIC是Java EE的一部分技术,它与它集成得非常好.
JASPIC身份验证模块不会自动记住会话这一事实也是一个优势,因为它使它们也适用于无状态应用程序(想想诸如JAX-RS之类的API).当您进行身份验证并希望进行会话时,只需将结果(用户名+组)放入会话中即可.然后在每个"validateRequest"方法开始时,快速检查会话中是否有任何内容,如果是,请再次将这些内容提供给容器.无需从头开始验证,当然也不需要记住任何密码!
Shiro和Spring Security是非常全功能的框架.你几乎无法将它与JASPIC进行比较,而JASPIC是非常低级和基本的.Spring和Shiro都没有与Java EE完美集成.据说Spring Security比Shiro更复杂.
希望这可以帮助