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 validator
。 validator
之前的东西应该是被约束的属性的名称,而不是类型。如果属性名为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 中如何设置列表