1

在将我的应用程序从 Grails 2.4.3 迁移到 Grails 3.3.8 并使用新的 spring 安全插件后,虽然 Java/Groovy 文件和 war 程序集的编译正常,但在部署期间我得到了 FilterRegistrationBean not found 错误。

从我的 build.gradle 中可以看出,我正在使用以下版本的 spring 安全插件: compile "org.grails.plugins:spring-security-core:3.2.1" compile "org.grails.plugins:spring-security -ui:3.1.1" 我已经尝试了所有其他可能的组合。比如 spring-security-core 的 3.2.3 和 spring-security-ui 的 3.1.2。我知道 Grails 3.3 使用的 Spring boot 1.5 已将 FilterRegistrationBean 移动到不同的包中。尽管如此,我还是无法弄清楚为什么会出现异常。

构建.gradle:

`dependencyManagement {
    imports {
        mavenBom "org.grails:grails-bom:3.3.8"
    }
    applyMavenExclusions false
}

dependencies {
    compile "org.grails:grails-core"
    compile "org.springframework.boot:spring-boot-starter-logging"
    compile "org.springframework.boot:spring-boot-starter-actuator"
    compile "org.springframework.boot:spring-boot-autoconfigure"
    compile "org.springframework.boot:spring-boot-starter-tomcat"

    compile "org.grails:grails-logging"
    compile "org.grails:grails-plugin-rest"
    compile "org.grails:grails-plugin-databinding"
    compile "org.grails:grails-plugin-i18n"
    compile "org.grails:grails-plugin-services"
    compile "org.grails:grails-plugin-url-mappings"
    compile "org.grails:grails-plugin-interceptors"

    compile "org.grails:grails-dependencies"
    compile "org.grails:grails-web-boot"
    runtime "org.springframework:spring-test"
    compile "org.apache.httpcomponents:httpcore"
    compile "org.apache.httpcomponents:httpclient"

    compile "org.grails.plugins:gsp"

//      compile 'org.grails.plugins:audit-logging:2.0.6'

    compile "org.grails.plugins:scaffolding"
    compile "org.grails.plugins:cache"

    compile "commons-io:commons-io:2.4"
    compile "org.xhtmlrenderer:flying-saucer-pdf-itext5:9.1.18"
    compile "org.grails.plugins:joda-time:2.1.0"
    compile "org.grails.plugins:quartz-monitor:1.3"
    compile "org.grails.plugins:remote-pagination:0.5.0"
    compile "org.grails.plugins:ckeditor:4.5.9.0"
    compile "org.grails.plugins:grails-pretty-time:4.0.0"
    compile 'com.bertramlabs.plugins:karman-grails:1.2.1'
    compile "org.grails.plugins:asynchronous-mail:2.0.2"

    compile "org.grails.plugins:asset-pipeline:3.2.1"

    compile "org.grails.plugins:spring-security-core:3.2.1"
    compile "org.grails.plugins:spring-security-ui:3.1.1"

    compile "mysql:mysql-connector-java:5.1.24"

    compile "org.grails.plugins:hibernate5"
    compile "org.hibernate:hibernate-core:5.1.5.Final"
    compile "org.hibernate:hibernate-ehcache:5.1.5.Final"
    compile ("org.grails.plugins:cache-ehcache:3.0.0.M1") {
        exclude group:'net.sf.ehcache'
    }
    compile "net.sf.ehcache:ehcache:2.4.3"

    compile "org.grails.plugins:aws-sdk:1.10.74"
    compile 'org.grails.plugins:converters:4.0.0'
    compile "org.grails.plugins:html-cleaner:3.0.0.1"

    // The following has been separated out in grails 3.3
    compile "org.grails:grails-datastore-gorm-async:6.1.9.RELEASE"

    // plugins needed at runtime
    runtime('org.grails.plugins:rendering:2.0.3', {
        //exclude group: '', module: ''
        //excludes 'itext','itext-rtf'
    })

    runtime "org.grails.plugins:events:4.0.0"
    runtime 'org.grails.plugins:aws-sdk:1.10.74'
    runtime "org.grails.plugins:database-migration:3.0.4"

    // plugin needed to use TLD files for JSP taglibs
    runtime "org.grails:grails-web-jsp"
    runtime "org.grails.plugins:hibernate5"
    runtime "org.hibernate:hibernate-core:5.1.5.Final"
    runtime "org.hibernate:hibernate-ehcache:5.1.5.Final"
    runtime "mysql:mysql-connector-java:5.1.24"

    testCompile "org.grails.plugins:geb:1.1.4"
    testCompile "org.grails:grails-test-mixins:3.3.0"
    testCompile "org.grails.plugins:hibernate5"
    testCompile "org.hibernate:hibernate-core:5.1.5.Final"
    testCompile "org.hibernate:hibernate-ehcache:5.1.5.Final"
    testCompile "mysql:mysql-connector-java:5.1.24"

    console "org.grails:grails-console"
}
grails {
    pathingJar = true
}

bootRun {
    jvmArgs('-Dspring.output.ansi.enabled=always')
    addResources = true
}`

资源.groovy:

`import org.springframework.web.filter.CharacterEncodingFilter
import org.springframework.context.support.ConversionServiceFactoryBean
import org.springframework.boot.web.servlet.FilterRegistrationBean
import org.springframework.core.Ordered

// Place your Spring DSL code here

beans = {

    springConfig.addAlias "springSecurityService", "springSecurityCoreSpringSecurityService"

    characterEncodingFilter(CharacterEncodingFilter) {
        encoding = "utf-8"
    }

    conversionService(ConversionServiceFactoryBean)

    charEncodingFilter(FilterRegistrationBean) {
        filter = characterEncodingFilter
        urlPatterns = ['/*']
        order = Ordered.HIGHEST_PRECEDENCE
    }
}`

堆栈跟踪:

`2019-09-07 17:11:39,119 [main] DEBUG g.c.DefaultGrailsApplication - Going to inspect artefact classes.
2019-09-07 17:11:53,396 [main] ERROR o.s.b.SpringApplication - Application startup failed
java.lang.NoClassDefFoundError: org/springframework/boot/context/embedded/FilterRegistrationBean
    at asset.pipeline.AssetPipelineGrailsPlugin$_doWithSpring_closure2.doCall(AssetPipelineGrailsPlugin.groovy:121)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1427)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
    at groovy.lang.Closure.call(Closure.java:418)
    at groovy.lang.Closure.call(Closure.java:412)
    at grails.spring.BeanBuilder.invokeBeanDefiningClosure(BeanBuilder.java:759)
    at grails.spring.BeanBuilder.beans(BeanBuilder.java:588)
    at grails.spring.BeanBuilder.invokeMethod(BeanBuilder.java:531)
    at org.grails.plugins.DefaultGrailsPlugin.doWithRuntimeConfiguration(DefaultGrailsPlugin.java:559)
    at org.grails.plugins.AbstractGrailsPluginManager.doRuntimeConfiguration(AbstractGrailsPluginManager.java:167)
    at grails.boot.config.GrailsApplicationPostProcessor.postProcessBeanDefinitionRegistry(GrailsApplicationPostProcessor.groovy:171)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:272)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:122)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
    at grails.boot.GrailsApp.run(GrailsApp.groovy:84)
    at grails.boot.GrailsApp.run(GrailsApp.groovy:393)
    at grails.boot.GrailsApp.run(GrailsApp.groovy:380)
    at grails.boot.GrailsApp$run.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:136)
    at ite.baseline.Application.main(Application.groovy:8)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.embedded.FilterRegistrationBean
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 34 common frames omitted`
4

0 回答 0