Spring MVC 和安全 - 授权期间受保护资源的标识
Spring MVC & Security - Identification of protected resource during authorization
我正在使用 Spring MVC 和 Spring 安全性构建一个 Tomcat/Java MVC Servlet 应用程序,并且发现在我看来像是控制器和授权步骤。
在标准 MVC 中,显示控制器检查请求,构建所涉及的业务资源的模型表示,并指定将输出呈现给客户端的视图。
在我的用例中,所提供的 "business resource" 是一个 "photo album",由配置文件(包含专辑名称、版权等)缓存的元数据(尺寸、缩略图、访问要求等)组成和实际图像。一些相册是私有的,要求用户登录并具有特定的组成员资格。这部分很好地封装在一个 Album
class 和负责管理实例的关联工厂中。在添加安全性之前,控制器使用工厂找到请求的 Album
实例,并将其放入模型中供视图使用。
然后我添加了 Spring 安全性。由于授权发生在 servlet 过滤器链中(在调用控制器之前)并且授权需要访问 Album
对象以做出访问控制决策,因此我被迫 locate/instantiate Album
授权阶段。这感觉不太对,但我看不出有任何其他方法可以在不复制功能的情况下实现我的目标。
问题:某些模型构建被推回授权步骤是 Web 应用程序中的正常模式,还是我错过了一些重要的事情?顺便说一句,为了不 lookup/instantiate 模型对象两次,我打算将它放入 HttpServletRequest
作为控制器使用的属性。
由于我没有得到答案,所以我将分享我自己的见解。
我根本不理解 Spring 的声明式安全模型的范围。如果您有一组资源具有基于登录用户的二进制可访问性状态 (yes/no),那么 Spring 安全模型是合适的。如果您需要更细粒度的控制(即显示页面但根据登录用户定制其内容),那么您必须在页面生成时进行自己的过滤。
我正在使用 Spring MVC 和 Spring 安全性构建一个 Tomcat/Java MVC Servlet 应用程序,并且发现在我看来像是控制器和授权步骤。
在标准 MVC 中,显示控制器检查请求,构建所涉及的业务资源的模型表示,并指定将输出呈现给客户端的视图。
在我的用例中,所提供的 "business resource" 是一个 "photo album",由配置文件(包含专辑名称、版权等)缓存的元数据(尺寸、缩略图、访问要求等)组成和实际图像。一些相册是私有的,要求用户登录并具有特定的组成员资格。这部分很好地封装在一个 Album
class 和负责管理实例的关联工厂中。在添加安全性之前,控制器使用工厂找到请求的 Album
实例,并将其放入模型中供视图使用。
然后我添加了 Spring 安全性。由于授权发生在 servlet 过滤器链中(在调用控制器之前)并且授权需要访问 Album
对象以做出访问控制决策,因此我被迫 locate/instantiate Album
授权阶段。这感觉不太对,但我看不出有任何其他方法可以在不复制功能的情况下实现我的目标。
问题:某些模型构建被推回授权步骤是 Web 应用程序中的正常模式,还是我错过了一些重要的事情?顺便说一句,为了不 lookup/instantiate 模型对象两次,我打算将它放入 HttpServletRequest
作为控制器使用的属性。
由于我没有得到答案,所以我将分享我自己的见解。
我根本不理解 Spring 的声明式安全模型的范围。如果您有一组资源具有基于登录用户的二进制可访问性状态 (yes/no),那么 Spring 安全模型是合适的。如果您需要更细粒度的控制(即显示页面但根据登录用户定制其内容),那么您必须在页面生成时进行自己的过滤。