Grails 1.3.5 和 Spring Security Core

标签 grails spring-security grails-plugin

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

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

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

谢谢你。
杰·钱德兰。

最佳答案

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

关于Grails 1.3.5 和 Spring Security Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3887875/

相关文章:

ajax - Grails从xhr获取文件

grails - grails依赖报告后如何删除有罪的jar文件

spring-security - AuthorizationServerSecurityConfigurer 中的 Realm 方法的用途是什么?

grails - Atmosphere Grails单用户广播

grails - grails使用来自父域和子域的类似查询创建一个列表

grails - 使grails有条件地在组合框中选择一个项目

spring-mvc - 即使定义了 CORS 映射,Google Tag Manager 403 的每个请求也是如此

spring-security - 如何使用 spring security 重定向到拒绝访问页面

grails - Grails插件站点版本语法

java - jasper grails 插件升级到 Java8 失败