Grails 3.2.4应用程序赢得';t添加Spring安全插件3.1.1后加载

Grails 3.2.4应用程序赢得';t添加Spring安全插件3.1.1后加载,grails,spring-security,Grails,Spring Security,我生成了一个新的Grails3.2.4应用程序。我生成了一些域对象、控制器和服务,然后让应用程序编译并运行。然后,我在build.gradle中添加了以下行 dependencies { ... compile "org.grails.plugins:spring-security-core:3.1.1" ... } 然后,我运行了以下命令,如中所述 我已经定义了User、Role和UserRole类,我在该命令生成的application.g

我生成了一个新的Grails3.2.4应用程序。我生成了一些域对象、控制器和服务,然后让应用程序编译并运行。然后,我在build.gradle中添加了以下行

    dependencies {
      ...
      compile "org.grails.plugins:spring-security-core:3.1.1"
      ...
   }
然后,我运行了以下命令,如中所述

我已经定义了User、Role和UserRole类,我在该命令生成的application.groovy中指出了这些类,并定义了:

grails.plugin.springsecurity.active = true
我还在一些视图中添加了
标记的一些用法

据我从文件上看,我不应该做任何其他事情。根据上面链接的文档,Spring安全属性应该在插件提供的DefaultSecurityConfig.groovy文件中定义默认值。但是,应用程序现在甚至不会运行。我遇到的第一个错误是:

    groovy.lang.MissingMethodException: No signature of method: static grails.plugin.springsecurity.SpringSecurityUtils.findFilterChainNames() is applicable for argument types: (org.grails.config.NavigableMap$NullSafeNavigator, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, groovy.util.ConfigObject) values: [[:], false, false, false, false, false, [:]]
Possible solutions: findFilterChainNames(java.lang.Object, boolean, boolean, boolean, boolean, boolean, boolean)
    at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1503)
    at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1489)
    at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:53)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at grails.plugin.springsecurity.ReflectionUtils.findFilterChainNames(ReflectionUtils.groovy:214)
我查看了一下,问题是有些属性的默认布尔值应该是true或false(根据上面的文档),但是它们根本没有定义,导致了这里显示的错误。我确认,如果我自己在application.groovy中定义这些属性,就会出现这个错误。然而,对于Spring安全代码运行到的下一个未定义的属性,它被另一个错误所取代,依此类推,对于我试图定义自己的每个属性,即使根据文档,我不应该这样做

我走了过去。但是,当从类路径加载并解析DefaultSecurityConfig时,我在文件中看到的属性不会在返回的配置映射中结束


我无法找出我做错了什么,因为我遵循了文档中的说明。我试图在网上搜索类似的问题,但什么也找不到。有人有什么想法吗?或者有其他人遇到过吗?

小家伙,我想出来了。我进一步深入到应该合并来自提供的DefaultSecurityConfig的属性的代码中,我注意到a)当它在DefaultSecurityConfig文件中单步执行时,断点没有与代码对齐,b)一些返回的属性具有旧的
grails.plugins
前缀,而不是新的
grails.plugin
前缀。这让我怀疑,是否有人引入了DefaultSecurityConfig的旧版本(可能还有其他groovy类),而不是正确的版本。因此,我清空了所有缓存jar和类的~/.grails、~/.gradle和~/.m2目录。在那之后,我的应用程序似乎正确地初始化了Spring安全性(然后由于找不到我配置了Spring安全性用作注销处理程序的bean而失败,我不确定原因,但这似乎与此问题无关)。

。我进一步深入到应该合并来自提供的DefaultSecurityConfig的属性的代码中,我注意到a)当它在DefaultSecurityConfig文件中单步执行时,断点没有与代码对齐,b)一些返回的属性具有旧的
grails.plugins
前缀,而不是新的
grails.plugin
前缀。这让我怀疑,是否有人引入了DefaultSecurityConfig的旧版本(可能还有其他groovy类),而不是正确的版本。因此,我清空了所有缓存jar和类的~/.grails、~/.gradle和~/.m2目录。在这之后,我的应用程序似乎正确地初始化了Spring Security(然后由于找不到我配置Spring Security用作注销处理程序的bean而失败,我不确定原因,但这似乎与此问题无关)。

我使用的是grails 3.2.8,在配置Spring Security ldap之后,基于表单的身份验证工作正常

然而,当我切换到基本身份验证时,出现了相同的错误。我使用application.properties文件作为ldap的配置道具,并将基本身份验证设置为true

grails.plugin.springsecurity.useBasicAuth = true

添加到application.yml和所有工作文件中

我正在使用Grails3.2.8,在配置SpringSecurityLDAP之后,基于表单的身份验证工作得很好

然而,当我切换到基本身份验证时,出现了相同的错误。我使用application.properties文件作为ldap的配置道具,并将基本身份验证设置为true

grails.plugin.springsecurity.useBasicAuth = true

添加到application.yml和所有工作文件中

个人从未尝试过——uiOnly
grails s2 quickstart com.yourapp用户角色
试试看它是否会改变用户的行为。您的方法在该页面上没有太多文档可悲的是,行为没有变化:个人从未尝试过——uiOnly
grails s2 quickstart com.yourapp用户角色
试试看它是否会改变行为。您的方法在该页面上没有太多文档可悲的是,行为没有变化: