2

我正在使用Spring MVC和Spring Security构建一个Tomcat/Java MVC Servlet应用程序,并且遇到了一些对我来说像控制器功能之间的体系结构不一致的问题和授权步骤。Spring MVC&Security - 授权过程中受保护资源的识别

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

在我的使用案例中,被提供的“业务资源”是一个由配置文件(包含专辑标题,版权等),缓存元数据(尺寸,缩略图,访问要求等)和实际图片。某些相册是专用的,要求用户登录并具有特定的组成员身份。这个部分已经封装在一个Album类中,并且负责管理实例的相关工厂。在添加安全性之前,控制器使用工厂来查找所请求的Album实例,并将其放入模型以供View使用。

然后我加入了Spring Security。由于授权发生在servlet过滤器链中(在调用Controller之前),并且授权需要访问Album对象以作出访问控制决定,所以我强制在授权阶段期间定位/实例化Album。这感觉不太对,但是我看不到任何其他方式来实现我的目标而不重复功能。

问题:Web应用程序中的某些模型构建的正常模式是否被推回授权步骤,或者我错过了一些重要的东西?顺便说一句,为了不查找/实例化模型对象两次我打算把它放入HttpServletRequest作为控制器使用的属性。

回答

1

因为我没有答案,我将分享我自己的见解。

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

相关问题