升级到 spring 3.1.2 后的 filterInterceptor.handlers

Posted

技术标签:

【中文标题】升级到 spring 3.1.2 后的 filterInterceptor.handlers【英文标题】:filterInterceptor.handlers after upgrade to spring 3.1.2 【发布时间】:2020-09-09 13:54:28 【问题描述】:

我升级到 Grails 3.0.17 和 Spring 3.1.2。我有这些错误

ERROR grails.boot.GrailsApp - Application startup failed
java.lang.ArrayIndexOutOfBoundsException: -1
        at java.util.ArrayList.elementData(ArrayList.java:422) ~[na:1.8.0_241]
        at java.util.ArrayList.remove(ArrayList.java:499) ~[na:1.8.0_241]
        at java_util_List$remove$7.call(Unknown Source) ~[na:na]
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) [groovy-2.4.5.jar:2.4.5]
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) [groovy-2.4.5.jar:2.4.5]
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) [groovy-2.4.5.jar:2.4.5]
 at BootStrap.renderResponseFiltersMustBeLastInPipeLine(BootStrap.groovy:34) ~[main/:na]

BootStrap.groovy 部分代码

 def filterInterceptor

    def init =  servletContext ->

        println "Initializing iMedCom client server"

        def applicationContext = grailsApplication.mainContext
        configureDatasource(applicationContext)
        renderResponseFiltersMustBeLastInPipeLine(filterInterceptor.handlers)

    

    private renderResponseFiltersMustBeLastInPipeLine(allFilters) 
        def index = allFilters.findIndexOf it.filterConfig.name == 'renderResponse'
        def filter = allFilters.remove(index)
        allFilters.add(0, filter)
    

在我的 application.groovy 中

grails.plugin.springsecurity.filterChain.chainMap = [
        [pattern: '/currentVersion',            filters: 'nonAuthFilter'],
        [pattern: '/patient-api.html',            filters: 'nonAuthFilter'],
        [pattern: '/isAlive',            filters: 'nonAuthFilter'],
        [pattern: '/isAlive/json',            filters: 'nonAuthFilter'],
        [pattern: '/isAlive/html',            filters: 'nonAuthFilter'],
        [pattern: '/**',            filters: 'JOINED_FILTERS,-exceptionTranslationFilter,-sessionManagementFilter,-rememberMeAuthenticationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter']
]

有什么想法吗?

【问题讨论】:

我隔离了问题,它似乎在:def filter = allFilters.remove(index) allFilters.add(0, filter) 但仍然不知道为什么 【参考方案1】:

以下是帮助我解决此问题的方法:

我替换了def index = allFilters.findIndexOf it.filterConfig.name == 'renderResponse'def index = allFilters.findAllit.filterConfig.name == 'renderResponse' 希望这对社区中的某个人有所帮助。

【讨论】:

以上是关于升级到 spring 3.1.2 后的 filterInterceptor.handlers的主要内容,如果未能解决你的问题,请参考以下文章

可以使用 c++filt 将解构后的名称写回 .s 文件本身吗?

简谈Spring Boot3.0升级后的踩坑之旅,另附解决方案!

Spring Security 4 升级后的 java.lang.NoSuchMethodError org.springframework.web.servlet.tags.form.InputTa

Spring Cloud 多租户灰度设计

Spring Cloud 多租户灰度设计

Spring Cloud 多租户灰度设计