Grails 1.3.5 и Spring Security Core - PullRequest
       14

Grails 1.3.5 и Spring Security Core

4 голосов
/ 08 октября 2010

Я создал приложение grails, которое при входе в систему перенаправляет пользователей на разные URL-адреса в зависимости от роли пользователя (пользовательские роли, определенные в домене ролей). Сейчас я пытаюсь интегрировать Spring Security Core Grails Plugin в приложение, поэтому планирую использовать доменную модель плагина.

Я понимаю, что действие auth в LoginController выполняет проверку имени пользователя и, если пользователь вошел в систему, перенаправляет к целевому URI по умолчанию. Мой вопрос: как я могу узнать, относится ли пользователь, выполняющий вход, к типу ROLE_ADMIN, ROLE_USER или какому-либо другому ROLE? Как я могу проверить полномочия здесь и затем перенаправить на другие URI?

Я также хотел бы знать, как выполняется проверка пользователя, то есть как и где имя пользователя и пароль проверяются в базе данных в весенней безопасности?

Спасибо. Джей Чандран.

1 Ответ

5 голосов
/ 08 октября 2010

Перенаправление происходит в org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler, но плагин расширяет этот класс в org.codehaus.groovy.grails.plugins.springsecurity.AjaxAwareAuthenticationSuccessHandler для поддержки входа в Ajax.

Если вы хотите настроить местоположение перенаправления на основе ролей, я бы создал подкласс AjaxAwareAuthenticationSuccessHandler и переопределил onAuthenticationSuccess(). У вас будет доступ к Аутентификации, поэтому вы сможете проверять предоставленные полномочия и определять, куда обратиться, основываясь на них.

Затем замените bean-компонент плагина на ваш в resources.groovy:

import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils

beans = {
   authenticationSuccessHandler(MyAuthenticationSuccessHandler) {
      def conf = SpringSecurityUtils.securityConfig

      requestCache = ref('requestCache')
      redirectStrategy = ref('redirectStrategy')
      defaultTargetUrl = conf.successHandler.defaultTargetUrl
      alwaysUseDefaultTargetUrl = conf.successHandler.alwaysUseDefault
      targetUrlParameter = conf.successHandler.targetUrlParameter
      ajaxSuccessUrl = conf.successHandler.ajaxSuccessUrl
      useReferer = conf.successHandler.useReferer
   }
}
...