Использование Shiro для защиты сервисов в Grails - PullRequest
1 голос
/ 03 февраля 2010

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

Пример на основе URI:

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()
      }
    } 
  } 
}

1 Ответ

3 голосов
/ 03 февраля 2010

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

Обновление

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

Итак, чтобы ответить на ваш вопрос о том, можете ли вы использовать фильтры для защиты сервисов, ответьте «нет», потому что у вас есть доступ к контроллеру только из фильтра. Однако вы можете использовать метапрограммирование Groovy для перехвата методов в стиле AOP на сервисах.

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

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

Помимо

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

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