我正在尝试决定如何保护一个现代的web应用程序。我是Java EE 6技术堆栈的新手,但我曾经做过一些没有利用安全性的项目,所以我正在寻找一些关于如何使用Java EE 6安全性的一般指导。
我知道声明性安全允许您根据分配给试图访问该资源的用户的角色来保护资源。因此,例如,用户请求特定URL上的页面时,Java服务器会检查用户的凭据,以查看他们是否有权访问该页面。对于只有经过身份验证的用户才能访问的资源,这是非常有意义的。很好的例子包括管理页面,用户帐户设置页面,受限内容区域。
因此,只要我将一个网站划分为安全和不安全的区域,就可以很好地工作,我没有任何问题。但是,我如何处理这样一种情况:我希望基于声明性安全的用户身份验证级别,使资源具有不同的行为。
例如,我可能在网站上有一个主页,如果用户是未经身份验证的用户,则显示一个带有登录提示的视图,但如果经过身份验证的用户访问该资源,则应显示某种控制面板,其中包含帐户管理链接等,而不是登录提示。
在现代JavaEE6应用程序中,这是如何实现的?声明式安全似乎没有足够的表现力来允许这种情况发生,因为它是非常“全有或全无”的。我读过一些关于编程安全性的文章,但所有的指南都是关于servlet的,在现代web应用程序中,我认为应该使用JSF,而不是原始的servlet。我希望确保当我保护一个基于用户身份验证状态的混合内容的web应用程序时,我不会在整个web应用程序中发送垃圾邮件安全代码,因为这非常容易出错,而且非常混乱。
考虑到上述要求,您会推荐哪些解决方案?我不是在寻找一步一步的方法,而是一些有用的指导,让我开始朝着正确的方向前进。“这是你可以使用的”和“这是如何实现你的目标”都会很有帮助!
最后一件事,我想避免在这个webapp上加载Spring套件。我尽可能地喜欢使用Java EE 6容器技术,并且我听说在使Spring托管bean和Java EE容器托管bean在彼此的上下文中可用方面存在问题。
发布于 2012-12-11 00:19:33
好的,你应该阅读: Java教程的Security章节。
简而言之,无论是在servlet还是EJB中,您都应该:
@DeclareRoles("javaee6user")
@RolesAllowed("javaee6user") (带有@Resource SessionContext ctx; bean上下文的声明性EJB)声明整个方法所允许的角色,并在方法内调用ctx.isCallerInRole("javaee6user"),就像在‘旧’EJB(编程式EJB)中所做的那样
https://stackoverflow.com/questions/13801204
复制相似问题