Как обезопасить доступ к загруженным пользователем файлам с фильтром в Grails? - PullRequest
0 голосов
/ 06 декабря 2011

Я создаю приложение Grails, которое использует Spring Security Core Plugin .

У меня есть две роли приложений. 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 .

Есть идеи, что я делаю не так?

1 Ответ

1 голос
/ 07 декабря 2011

Не следует смешивать фильтры Grails с Spring Security - все это можно сделать из Spring Security.Используете ли вы тип конфигурации "InterceptUrlMap" (grails.plugins.springsecurity.securityConfigType = "InterceptUrlMap")?По умолчанию он использует аннотации, поэтому настройка securityConfigType будет игнорироваться.

Если вы используете аннотации, вы можете добавить этот шаблон URL в параметр конфигурации staticRules:

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

Попробуйте запустить grails clean для принудительной полной компиляции;это может быть просто, если какой-то код не синхронизирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...