到目前为止,我见过的所有Java EE授权技术仅适用于视图层 - 主要基于JSF。您基本上限制对某些URL模式或JSF组件的访问。
但是,我更喜欢在服务上安装我的安全层。我的图层看起来像这样:
由于服务是我的业务逻辑的代理,并且它们本身不包含任何逻辑,因此我想将它们用于访问控制。这样我就不需要单独为每个视图技术实现安全性,也不需要注意URL模式(维护起来很糟糕)。
我首选的解决方案是对服务的类或方法进行注释。如果某些视图代码试图在未经许可的情况下访问它们,则会获得异常(处理并转发到登录表单)。
我可以使用这样的东西吗?
答案 0 :(得分:4)
我首选的解决方案是对服务的类或方法进行注释。如果某些视图代码试图在未经许可的情况下访问它们,则会获得异常(处理并转发到登录表单)。
我可以使用这样的东西吗?
是。您熟悉的内容称为“应用程序级”安全性,它确实很常见。但Java EE长期以来一直提供内置的声明机制作为替代或辅助;这些可以在Web应用程序级别或组件级别上运行。这里的细节太广泛了,但Java EE教程有三章涵盖它们。您可能希望从the overview开始。
处于非常高的水平,
传统上,声明性安全要求已在部署描述符中表达。详细信息因受保护的组件或应用程序类型而异。
至少从Java EE 6开始,一些安全声明也可以通过组件源中的注释进行。
用户身份验证和授权的主要内置机制是Java Authentication and Authorization Services(JAAS)。这实际上是一种Java SE技术,因此您也可以将它用于常规应用程序。如果你曾经使用Solaris的/ Linux可插拔认证模块(PAM)子系统,那么JAAS会对概念感到熟悉。
一些Java EE容器和一些应用程序框架提供了自己的安全机制;如果你的情况允许你考虑这些事情,那么值得一看。