Grails 1.3.5和Spring Security Core

时间:2010-10-08 05:14:01

标签: grails spring-security grails-plugin

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

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

我还想知道如何完成用户验证,即&在spring security中针对数据库验证用户名和密码的位置?

谢谢。 杰伊钱德兰。

1 个答案:

答案 0 :(得分:5)

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

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

然后在resources.groovy:

中用你的bean替换插件的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
   }
}