【问题标题】:Grails 1.3.5 and Spring Security CoreGrails 1.3.5 和 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 中,用户名和密码是如何以及在哪里验证数据库的?

谢谢。 杰伊·钱德兰。

【问题讨论】:

    标签: grails spring-security grails-plugin


    【解决方案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
       }
    }
    

    【讨论】:

    • 非常感谢。我相信我会有更多的疑问。
    猜你喜欢
    • 2017-11-09
    • 2016-05-06
    • 2019-05-09
    • 2017-06-20
    • 2012-11-04
    • 2011-09-12
    • 2016-03-23
    • 2012-09-29
    • 2014-05-04
    相关资源
    最近更新 更多