【问题标题】:How to secure acces to user uploaded files with a filter in Grails?如何使用 Grails 中的过滤器保护对用户上传文件的访问?
【发布时间】:2012-01-14 08:11:54
【问题描述】:

我正在构建一个使用 Spring Security Core Plugin 的 Grails 应用程序。

我有两个应用程序角色。 ROLE_USER 和 ROLE_ADMIN

用户可以上传存储在名为files

的目录中的文件
  1. 外部用户不应看到任何文件
  2. ROLE_ADMIN 用户可以看到每个上传的文件。
  3. ROLE_USER 用户应仅在某些情况下允许使用

文件 url 请求应如下所示

http://localhost:8080/MyApp/files/patient1-1.png

对于第一种情况,我在 conf/Config.groovy 中设置了下一个 url 拦截器

grails.plugins.springsecurity.interceptUrlMap = [
    '/files/**': ['ROLE_USER']
]

对于第二种和第三种情况,我创建了下一个文件 conf/MyFilters

class MyFilters {
    def springSecurityService

    public currentUser() {  return User.get(springSecurityService.principal.id);}
    public userRoles()   { return springSecurityService.principal.authorities*.authority }

    def filters = {
        fileFilter(uri: '/files/*') {
            before = {
                println "Here"
                def String url = request.getRequestURL()
                if(url.contains("files/patient")) {
                    if(!userRoles().contains(Role.ROLE_ADMIN)) {
                        if(PLAIN ROLE USER IS NOT ALLOWED) {
                          redirect(action:'login')
                          return false;
                        }
                    }
                }
            }
            after = {

            }
            afterView = {

            }
        }
    }

}

但是,它似乎没有被触发。我从来没有看到 Here 打印出来。

知道我做错了什么吗?

【问题讨论】:

  • 您是否尝试在过滤器 url 匹配规则中使用 /files/**?当您激活所有网址的过滤器时会发生什么,您能看到您的打印信息吗?

标签: grails spring-security


【解决方案1】:

您不应该将 Grails 过滤器与 Spring Security 混合使用 - Spring Security 一切皆有可能。您是否使用“InterceptUrlMap”配置类型 (grails.plugins.springsecurity.securityConfigType = "InterceptUrlMap")?默认情况下它使用注解,因此securityConfigType 设置将被忽略。

如果您使用注释,您可以将此 url 模式添加到 staticRules 配置选项:

grails.plugins.springsecurity.controllerAnnotations.staticRules = [
   '/files/**': ['ROLE_USER']
]

尝试运行grails clean 强制进行完整编译;这可能很简单,因为某些代码不同步。

【讨论】:

    猜你喜欢
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多