我正在使用Spring MVC和Spring Security构建一个Tomcat / Java MVC Servlet应用程序,并且看起来像是Controller的功能与授权步骤之间的体系结构不一致。
在标准MVC中,显示控制器检查请求,构建所涉及的业务资源的模型表示,并指定将输出呈现给客户端的视图。
在我的用例中,所提供的“业务资源”是一个“相册”,包含配置文件(包含专辑标题,版权等)缓存的元数据(维度,缩略图,访问要求等)和实际图像。某些相册是私有的,要求用户登录并具有特定的组成员身份。这部分很好地封装在Album
类和负责管理实例的相关工厂中。在添加安全性之前,Controller使用工厂查找请求的Album
实例,并将其放入模型中供View使用。
然后我添加了Spring Security。由于授权发生在servlet过滤器链中(在调用Controller之前)并且授权需要访问Album
对象以作出访问控制决策,因此我被迫在授权期间找到/实例化Album
相反。这感觉不太对,但我没有看到任何其他方法来实现我的目标而不重复功能。
问题:在Web应用程序中,某些模型构建是否会被推回授权步骤,或者我错过了哪些重要内容?顺便说一句,为了不重复查找/实例化模型对象,我计划将其作为属性供HttpServletRequest
使用。
答案 0 :(得分:1)
由于我没有得到答案,我将分享自己的见解。
我根本不了解Spring的声明性安全模型的范围。如果您有一组基于登录用户具有二进制可访问性状态(是/否)的资源,那么Spring Security的模型是合适的。如果你需要更细粒度的控制(即显示一个页面,但根据登录用户定制其内容),那么你必须在页面生成时进行自己的过滤。