4

我已经构建了一个 grails 应用程序,它在登录时根据用户的角色(在角色域中定义的自定义角色)将用户重定向到不同的 URL。现在我正在尝试将 Spring Security Core Grails Plugin 集成到应用程序中,因此计划使用插件的域模型。

我了解 LoginController 中的 auth 操作会执行用户登录验证,并且如果用户登录则重定向到默认目标 URI。我的问题是如何知道登录用户的类型是 ROLE_ADMIN 还是 ROLE_USER 或任何其他 ROLE?如何在此处检查权限,然后重定向到不同的 URI?

我还想知道用户验证是如何完成的,即在 Spring Security 中,用户名和密码如何以及在哪里验证数据库?

谢谢你。杰伊·钱德兰。

4

1 回答 1

5

重定向发生在,org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler但插件扩展了此类org.codehaus.groovy.grails.plugins.springsecurity.AjaxAwareAuthenticationSuccessHandler以支持 Ajax 登录。

如果您想根据角色自定义重定向位置,我会继承AjaxAwareAuthenticationSuccessHandler并覆盖onAuthenticationSuccess(). 您将有权访问身份验证,因此您可以检查授予的权限并根据这些权限确定去哪里。

然后在 resources.groovy 中用你的替换插件的 bean:

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
   }
}
于 2010-10-08T05:59:55.953 回答