2010-02-03 5 views
1

Я использую grails для создания приложения, которое функционирует в первую очередь как сервисная инфраструктура. Мой вопрос: могут ли сервисы быть защищены так же, как контроллеры?Использование Shiro для обеспечения сервисов в grails

Ури основе пример:

class SecurityFilters { 
    def filters = { 
    all(uri: "/**") { 
     before = { 
     // Ignore direct views (e.g. the default main index page). 
     if (!controllerName) return true 
     // Access control by convention. 
     accessControl() 
     } 
    } 
    } 
} 

ответ

3

Я понятия не имею, если плагин Shiro поддерживает это, но Acegi plugin делает, хотя и в «экспериментальной» моды (что бы это ни значило).

Update

Прочитав вопрос правильно, это, кажется, вы спрашиваете, можно ли использовать фильтры для обеспечения услуг. Если это так, то Сиро несколько неактуальен, потому что это фильтры, которые выполняют авторизацию, а не Сиро.

Чтобы ответить на ваш вопрос о том, можете ли вы использовать фильтры для защиты сервисов, ответ отрицательный, потому что у вас есть доступ к контроллеру изнутри фильтра. Тем не менее, вы можете использовать метапрограммирование Groovy, чтобы выполнить перехват методов в стиле AOP для служб.

Основной подход:

  • Для каждой службы, добавьте invokeMethod свойство Метакласс
  • Значение этого свойства должно быть закрытие. Это закрытие будет перехватывать (т. Е. Вызывать вместо) каждый метод, вызываемый службой.
  • Это замыкание должно
    • Выполните проверку безопасности
    • Invoke оригинальный метод, если авторизация прошла успешно, и бросить исключение (или показать ошибку), если авторизация не удается

Помимо

Если возможно, я настоятельно рекомендую использовать доказательство n плагин безопасности (например, Shiro, Acegi), чтобы выполнить авторизационные проверки, а не катиться самостоятельно, как описано выше.

+0

Спасибо. Я использую сиро, а не ацеги. Я хотел бы воспользоваться фильтрацией для обеспечения безопасности. Извините, если это не ясно. – Brandon

+0

Спасибо за фантастический совет. – Brandon

 Смежные вопросы

  • Нет связанных вопросов^_^