2010-10-08 3 views
4

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

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

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

Thank you. Jay Chandran.

ответ

5

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

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

Затем замените компонент плагина с вашими в 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 
    } 
} 
+0

Большое спасибо. Уверен, у меня будет больше запросов. –