Spring安全核心框架在Grails Spring安全核心插件中配置两次

时间:2016-02-29 19:23:53

标签: grails spring-security grails-plugin

我正在使用Grails spring安全核心插件版本3.0.3。

配置spring安全核心框架时的调试语句打印两次,过滤器链也初始化两次

WARN grails.plugin.springsecurity.SpringSecurityCoreGrailsPlugin -
Configuring Spring Security Core ...

Configuring Spring Security Core ...
WARN grails.plugin.springsecurity.SpringSecurityCoreGrailsPlugin - ... finished
configuring Spring Security Core

... finished configuring Spring Security Core

构建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 "org.grails.plugins:hibernate:4.3.10.5"
    }
}

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

version "0.1"
group "restservicesapp"

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

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

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

dependencyManagement {
    imports {
        mavenBom "org.grails:grails-bom:$grailsVersion"
    }
    applyMavenExclusions false
}

dependencies {
    compile "org.springframework.boot:spring-boot-starter-logging"
    compile "org.springframework.boot:spring-boot-starter-actuator"
    compile "org.springframework.boot:spring-boot-autoconfigure"
    provided "org.springframework.boot:spring-boot-starter-tomcat"
    compile "org.grails.plugins:hibernate"
    compile "org.grails.plugins:cache"
    compile "org.hibernate:hibernate-ehcache"

    runtime "mysql:mysql-connector-java:5.1.38"
    compile 'org.grails.plugins:spring-security-core:3.0.3'
    compile ('org.grails.plugins:spring-security-rest-gorm:2.0.0.M2') {
        exclude group: 'org.grails.plugins', module: 'spring-security-core'
    }


    testCompile "org.grails:grails-plugin-testing"
    testCompile "org.grails.plugins:geb"

    //console "org.grails:grails-console"
}

task wrapper(type: Wrapper) {
    gradleVersion = gradleWrapperVersion
}

2 个答案:

答案 0 :(得分:0)

你的build.gradle有/books/faust /books/romeo-and-juliet /ebooks/from-zero-to-hero /blog /about-us /deprecated-page 吗?可能正在创建两个上下文。一个用于您的主应用,另一个用于您的/books/goethe/faust /books/shakespeare/romeo-and-juliet /ebooks/random-wannabe/from-zero-to-hero /blog /about-us /newly-added-page 。将cfx依赖项移动到spring安全性插件上方的gradle文件中,然后您应该看到spring security仅配置一次。我已经在这2个多星期了。但这为我解决了这个问题。对我来说,这实际上是一个问题,因为弹簧安全第二次配置它有时给我的NPE。 See this question仅限我自己。

更新

我的上述评估证明是错误的。真正的解决方案是,将以下代码段添加到build.gradle中 org.grails.plugins:cxf

答案 1 :(得分:0)

我认为Spring Security没有配置两次。一行输出来自日志记录,另一行是println。 以下是grails.plugin.springsecurity.SpringSecurityCoreGrailsPlugin的一些代码:

    Closure doWithSpring() {{ ->
    ReflectionUtils.application = SpringSecurityUtils.application = grailsApplication

    SpringSecurityUtils.resetSecurityConfig()
    def conf = SpringSecurityUtils.securityConfig
    boolean printStatusMessages = (conf.printStatusMessages instanceof Boolean) ? conf.printStatusMessages : true
    if (!conf || !conf.active) {
        if (printStatusMessages) {
            String message = '\n\nSpring Security is disabled, not loading\n\n'
            log.warn message
            println message
        }
        return
    }

    log.trace 'doWithSpring'

    if (printStatusMessages) {
        String message = '\nConfiguring Spring Security Core ...'
        log.warn message
        println message
    }