我有一个使用 Spring 3.1 构建的 Web 应用程序,使用 Spring Security 3.0,部署在 Tomcat 6 下。站点中的某些页面仅对具有 ROLE_MEMBER 角色的用户可用。其中一个页面显示了可供下载的动态文件列表。用户可以使用应用程序内的安全表格上传新文件。我的问题是:我可以在哪里存储文件,以便 Spring Security 保护对它们的访问?我目前将它们放在 Web 应用程序文件夹中,但这使得部署新版本的应用程序很痛苦,因为我必须备份文件并在 Tomcat 重新部署新版本后恢复它们。
最佳答案
Spring Security 可以保护某些 URL 或方法调用。它无法保护您的文件。所以你的文件在哪里并不重要。用户可以使用哪个 URL 下载某些文件很重要。
例子:
http://domain.com/files.html - list of files
对应文件:
http://domain.com/files/file1.pdf
http://domain.com/files/file2.doc
http://domain.com/files/file3.png
安全配置:
<intercept-url pattern="/files.html" access="hasRole('ROLE_MEMBER')" />
<intercept-url pattern="/files/**" access="hasRole('ROLE_MEMBER')" />
实际文件路径(从安全角度来看它们并不重要):
/home/user/uploads/file1.pdf
/home/user/uploads/file2.doc
/home/user/uploads/file3.png
当然,您需要一些 servlet/ Controller 来负责通过给定的 URL 发送文件内容。
关于tomcat - 在 war 之外保护对文件的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15787776/