GrailsSpring安全插件图像访问控制
我正在尝试制作一个在线照片库,用户可以从Android等移动设备将图像上传到服务器并访问它。 当前我正在使用Grails with Spring Security Plugin Core,我将所有上传的图像保存在/web app/upload image文件夹中。上载部分当前正在工作,我可以将图像从我的设备上载到服务器上载图像文件夹。 然而,我的一个问题是,目前我正在Config.groovy中使用这些行来执行访问控制部分GrailsSpring安全插件图像访问控制,grails,spring-security,Grails,Spring Security,我正在尝试制作一个在线照片库,用户可以从Android等移动设备将图像上传到服务器并访问它。 当前我正在使用Grails with Spring Security Plugin Core,我将所有上传的图像保存在/web app/upload image文件夹中。上载部分当前正在工作,我可以将图像从我的设备上载到服务器上载图像文件夹。 然而,我的一个问题是,目前我正在Config.groovy中使用这些行来执行访问控制部分 grails.plugins.springsecurity.interc
grails.plugins.springsecurity.interceptUrlMap = [
/uploaded_image/**':['IS_AUTHENTICATED_REMEMBERED']
]
我计划让控制器将映像的路径与名为image的DomainClass关联,该DomainClass将与每个用户的DomainClass关联。
我的问题是,如何使不是图像所有者的用户没有查看图像的权限?
我试着在谷歌上搜索答案,但并没有找到很多有用的答案。
谢谢您的时间。首先,将图像上传到爆炸战争路径是个坏主意。当您必须部署更新时会发生什么?最好将图像完全存储在战争结构之外 其次,我用了几种不同的方法来处理这个问题
- 通过Grails控制器将图像流回。这样,您就可以直接访问映像请求,并处理您想要的任何类型的安全性,包括检查角色等
def avatarFilePath = new File(userInstance.avatarURL)
response.setContentType("application/png")
response.setContentLength(avatarFilePath.size().toInteger())
OutputStream out = response.getOutputStream();
out.write(avatarFilePath.bytes);
out.close();
- 将图像存储在某些内容存储库中(可能是AmazonS3),然后通过提供者API控制权限,或者让您自己的控制器管理安全性,然后通过提供者适当重定向
- 在Tomcat/容器前面使用Apache,让Apache处理流式处理图像的所有细节。然而,我不知道如何处理这种情况下的安全问题
class ImageController {
def springSecurityService
def showImage() {
Image image=Image.get(parmas.long("id")
// this is the user who is trying to access image from ui
User user = User.get(image.userId)
//this is the logged-in user
User logged = User.get(springSecurityService.principal.id)
if (user.id != logged.id) {
{
redirect(action: "accessDenied", controller='access' id: params.long("id"))
//re-direct accessDenied page
}else{
//show image
}
}
Class AccessController{
def accessDenied= {
render(view: "accessDenied")
}
}
我不确定这是否是解决问题的最佳方法,但我最终使用Requestmap方法来进行访问控制,然后添加一个新的Requestmap,它只允许上传它的用户在每次上传新文件时访问它。似乎每次有人上传一张图片时,缓存都必须被清除,所以我不确定这是否是一个好的解决方案,而且现在看起来它有点像我想要的。谢谢你的回复。我真的想接受这两个答案,但它只允许我接受一个。不过,非常感谢您的回复。我按照您的建议将上载的图像文件夹移出WAR路径。目前为止,它工作得相当好。再次感谢您的回复。你的代码真的帮助我了解了大局。再次谢谢你。我真希望我能投票支持两个答案。然而,我还没有足够的声望去投票。