在将我的应用程序从 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`