Grails3.0和Spring安全性错误

Grails3.0和Spring安全性错误,grails,spring-security,grails-3.0,Grails,Spring Security,Grails 3.0,在我的build.gradle中,我添加了这行代码 dependencies { compile "org.grails.plugins:spring-security-core:3.0.3" } 然后当我尝试使用它时 import grails.plugin.springsecurity.annotation.Secured @Secured('ROLE_ADMIN') class SecureController { def index()

在我的build.gradle中,我添加了这行代码

 dependencies {

    compile "org.grails.plugins:spring-security-core:3.0.3"

   }
然后当我尝试使用它时

    import grails.plugin.springsecurity.annotation.Secured

    @Secured('ROLE_ADMIN')
     class SecureController {
def index() {
    render 'Secure access only'
}
它“无法解析springsecurity符号” 我得到了错误

 Error:(5, 1) Groovyc: unable to resolve class Secured ,  unable to find class for annotation
任何帮助都将不胜感激

Build.gradle****编辑

这是整个build.gradle文件

    buildscript {
    ext {
    grailsVersion = project.grailsVersion
}
repositories {
    mavenLocal()
    maven { url "https://repo.grails.org/grails/core" }
}
dependencies {
    classpath "org.grails:grails-gradle-plugin:$grailsVersion"
    classpath 'com.bertramlabs.plugins:asset-pipeline-gradle:2.5.0'
    classpath "org.grails.plugins:hibernate:4.3.10.5"
       }
   }

plugins {
id "io.spring.dependency-management" version "0.5.4.RELEASE"
}

  version "0.1"
  group "securityrolesspring"

    apply plugin: "spring-boot"
   apply plugin: "war"
   apply plugin: "asset-pipeline"
   apply plugin: 'eclipse'
   apply plugin: 'idea'
   apply plugin: "org.grails.grails-web"
   apply plugin: "org.grails.grails-gsp"

  ext {
 grailsVersion = project.grailsVersion
       gradleWrapperVersion = project.gradleWrapperVersion
       }

      assets {
       minifyJs = true
       minifyCss = true
      }

 repositories {
       mavenLocal()
maven { url "https://repo.grails.org/grails/core" }
}

在“apply plugin:“war”之后添加一行内容: 应用插件:“maven”

在“存储库”部分的“mavenLocal()”后面添加一行,内容如下: mavenCentral()

最后一条建议只是表面上的,但我要改变你的观点: 编译“org.grails.plugins:springsecuritycore:3.0.3”

然后把它放在 编译“org.grails.plugins:scaffolding”行。保持grails依赖项的初始集合与初始“grailscreateapp”命令中的依赖项基本相同,这是一种很好的形式。此规则的例外情况是,如果您想用其他内容替换logback日志记录,但这是另一回事


最后,您还可以将您的spring security core依赖项更改为3.0.4版,该版本现已发布。

spring security core已更新@Secured Annotations的包位置。我在项目中使用Grails3.2.3和SpringSecurityCore3.1.1,效果很好。下面是我使用的配置,它与SpringSecurityCore和Grails(2.X)的previos版本一样工作

对于安装,如果您的build.gradle文件不可用,则必须在dependencies块中添加条目。有关详细信息,请参见

要在控制器中使用安全批注,导入(org.springframework.security.access.annotation.security)包和@security annotation上都有更新,您必须将要执行的安全语句分配给“value”。例如,@Secured('ROLE_ADMIN')的注释必须更改,如下例所示

import org.springframework.security.access.annotation.Secured

@Secured(value=["hasRole('ROLE_ADMIN')"])
class SecureController {
    def index() {
    render 'Secure access only'
}
详细配置见官方文档页面,以及如何通过导入

import grails.plugin.springsecurity.annotation.Secured
你将能够解决你的问题


它会再次指出它无法解析符号“Secured”,但您需要忽略它,因为代码将完全按照您的期望运行。

您是将编译依赖项添加到现有依赖项块还是仅使用此行创建了新的依赖项块?现有依赖项块,这对Drogoif有影响吗?应该没问题。尝试使用gradle而不是IDE编译项目。例如,项目文件夹中的
gradlew类
。如果错误是相同的,您能提供完整的build.gradle吗?我如何使用gradle编译项目?我对这个@droggo有点陌生,是的,我现在会更新整个build.gradle@droggo
import org.springframework.security.access.annotation.Secured

@Secured(value=["hasRole('ROLE_ADMIN')"])
class SecureController {
    def index() {
    render 'Secure access only'
}
import grails.plugin.springsecurity.annotation.Secured