Groovy:使用 Grails 和 Spring 安全核心插件时出现意外令牌

Posted

技术标签:

【中文标题】Groovy:使用 Grails 和 Spring 安全核心插件时出现意外令牌【英文标题】:Groovy:unexpected token when using Grails and Spring security core plugin 【发布时间】:2014-09-17 21:32:04 【问题描述】:

我需要将 Spring Security 核心添加到 Grails。 我已将 spring 核心安全插件添加到 grails 2.3.8 应用程序中, 使用:BuildConfig.groovy 插件 ... 编译“:spring-security-core:2.0-RC4” ...

那么 s2-quickstart sim GUser GRole

文件 GUserGRole.groovy 包含以下错误:

Groovy:unexpected token:validator @ line 82, column 9。 此行有多个标记 - Groovy:期待 EOF,在第 83 行找到“if”, 第 4 栏。 - Groovy:unexpected token: if @ line 83, 第 4 栏。

对应如下代码:

static constraints = 
    GRole validator:  GRole r, GUserGRole ur ->
        if (ur.GUser == null) return
        boolean existing = false
        GUserGRole.withNewSession 
            existing = GUserGRole.exists(ur.GUser.id, r.id)
        
        if (existing) 
            return 'userRole.exists'
        
    

如何解决? 如何将 Spring Security 核心干净地添加到 Grails??

【问题讨论】:

这段代码对我来说没有多大意义。你到底想用这个来完成什么? 安装安全插件后运行 quickstart 时会自动创建显示的代码。 与 Grails 2.4.4 和 spring-security-core:2.0-RC3/RC4 与 IDEA 14 相同的问题。 【参考方案1】:

请查看此处Groovy: Unexpected token ":"的讨论?

由于代码是自动生成的,您应该手动更正类变量的名称并将其从“GRole GRole”更改为“GRole gRole”。

【讨论】:

【参考方案2】:

s2quick-start 使用 GrailsNameUtils.getPropertyNameRepresentation 为您的域类生成实例字段。使用会生成合适的字段名称的名称,否则字段名称和类名称相同。

 //This is fine - generates 'user'
 GrailsNameUtils.getPropertyNameRepresentation("User") 

 //This is fine - generates 'myUser'
 GrailsNameUtils.getPropertyNameRepresentation("MyUser")

 //Not fine. Generates 'GRole' which is same as your class name
 GrailsNameUtils.getPropertyNameRepresentation("GRole")

【讨论】:

【参考方案3】:

一个问题是GRole validatorvalidator 之前的东西应该是被约束的属性的名称,而不是类型。如果属性名为gRole,则代码应为gRole validator。该物业真的叫GRole吗?如果是这样,那可能会有问题。

【讨论】:

在安装了 spring security 插件之后,我运行了 quickstart 来初始化插件。 GRole 与 GUser 一起被创建为 GUserGRole 中的属性名称。我的印象是,使用 Grails 2,安装 spring security core 插件非常简单?

以上是关于Groovy:使用 Grails 和 Spring 安全核心插件时出现意外令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring resource.groovy 正确注入 Grails 服务

Grails 和 Spring - 在 resources.groovy 中如何设置列表

从 grails 应用程序中的自定义 groovy 文件加载 spring bean

groovy 和 grails 的编辑器? [关闭]

Grails - SSL 和 Spring 安全核心

使用 Grails 和 Spring Security 进行跨域身份验证