Java springmvc&;安全性-授权期间受保护资源的标识

Java springmvc&;安全性-授权期间受保护资源的标识,java,spring-mvc,design-patterns,model-view-controller,spring-security,Java,Spring Mvc,Design Patterns,Model View Controller,Spring Security,我正在使用SpringMVC和SpringSecurity构建一个Tomcat/JavaMVCServlet应用程序,在我看来,控制器的功能和授权步骤之间存在架构上的不一致 在标准MVC中,显示控制器检查请求,构建相关业务资源的模型表示,并指定将输出呈现给客户端的视图 在我的用例中,提供的“业务资源”是一个“相册”,由配置文件(包含相册标题、版权等)缓存的元数据(尺寸、缩略图、访问要求等)和实际图像组成。有些相册是私有的,要求用户登录并具有特定的组成员资格。此部分封装在相册类和负责管理实例的相关

我正在使用SpringMVC和SpringSecurity构建一个Tomcat/JavaMVCServlet应用程序,在我看来,控制器的功能和授权步骤之间存在架构上的不一致

在标准MVC中,显示控制器检查请求,构建相关业务资源的模型表示,并指定将输出呈现给客户端的视图

在我的用例中,提供的“业务资源”是一个“相册”,由配置文件(包含相册标题、版权等)缓存的元数据(尺寸、缩略图、访问要求等)和实际图像组成。有些相册是私有的,要求用户登录并具有特定的组成员资格。此部分封装在
相册
类和负责管理实例的相关工厂中。在添加安全性之前,控制器使用工厂查找请求的
相册
实例,并将其放置到模型中供视图使用

然后,我在组合中加入了Spring安全性。由于授权发生在servlet过滤器链中(在调用控制器之前),授权需要访问
Album
对象以做出访问控制决策,因此我不得不在授权阶段定位/实例化
Album
。这感觉不太对,但我看不到任何其他方法来实现我的目标,而不复制功能


问:在web应用程序中,一些模型构建被推回授权步骤是一种正常模式,还是我遗漏了一些重要的内容?顺便说一句,为了避免两次查找/实例化模型对象,我计划将其作为控制器使用的属性放入
HttpServletRequest

因为我没有得到答案,所以我将分享我自己的见解

我只是不理解Spring声明式安全模型的范围。如果您有一组资源具有基于登录用户的二进制可访问性状态(是/否),那么Spring Security的模型是合适的。如果您需要更细粒度的控制(即显示页面,但根据登录用户定制其内容),那么您必须在页面生成时进行自己的筛选