Grails 1.3.5 和 Spring Security Core

Posted

技术标签:

【中文标题】Grails 1.3.5 和 Spring Security Core【英文标题】:Grails 1.3.5 and Spring Security Core 【发布时间】:2011-04-22 17:16:10 【问题描述】:

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

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

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

谢谢。 杰伊·钱德兰。

【问题讨论】:

【参考方案1】:

重定向发生在 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
   

【讨论】:

非常感谢。我相信我会有更多的疑问。

以上是关于Grails 1.3.5 和 Spring Security Core的主要内容,如果未能解决你的问题,请参考以下文章

Grails Spring Security 验证多个 url 的访问

Grails 使用 spring-security-core-3.0.6+ 重定向注销后

grails spring-security 插件保护所有控制器,而不仅仅是带有@Secured注解的控制器

在 grails gsp 中调用标签不起作用

Grails - SSL 和 Spring 安全核心

Grails 3.0 和 Spring Security