gpt4 book ai didi

grails - 确保在 springSecurityFilterChain 之后附加来自插件的 web.xml 过滤器映射

转载 作者:行者123 更新时间:2023-12-02 14:41:16 24 4
gpt4 key购买 nike

我正在尝试添加一个非常简单的 DelegatingFilterProxy通过自定义插件到我的 Grails 应用程序。

我希望过滤器在 springSecurityFilterChain 之后执行过滤器,以便我可以在自定义过滤器中使用某些特定于安全的信息。

我试过使用 loadAfterloadBeforedoWithWebDescriptor 中使用不同的技术,但都以相同的结果结束:我的自定义过滤器映射始终列在 springSecurityFilterChain 之前.以下是我当前的 doWithWebDescriptor 迭代

def contextParams = xml.'context-param'
contextParams[contextParams.size() - 1] + {
filter {
'filter-name'('auditFilter')
'filter-class'(DelegatingFilterProxy.name)
}
}

def filterMappings = xml.'filter-mapping'
filterMappings[filterMappings.size() - 1] + {
'filter-mapping' {
'filter-name'('auditFilter')
'url-pattern'('/*')
}
}

有没有正确的方法来解决这个问题?

最佳答案

chalice WebXmlConfig插件提供了与 web.xml 文件一起使用的附加功能。它连接到 event , eventWebXmlEnd监听 web.xml 文件何时生成。完成后,插件将在必要时尝试重新排序 servlet 过滤器。它遍历所有其他插件并寻找 webXmlFilterOrder插件描述符中的属性。如果找到该属性,它会注册所需的位置,并在遍历所有插件后重写 web.xml 文件。

该插件实际上已经作为 Spring Security Core 的依赖项包含在内。插件,但您也应该将其添加到您自己的插件的BuildConfig.groovy文件:

compile ':webxml:1.4.1'

所以要加入这个功能,你需要添加一个 webXmlFilterOrder属性到您的插件描述符(实际上只是一个 setter/getter )。您可以将其放在 doWithWebDescriptor 的正上方关闭(您还需要导入 grails.plugin.webxml.FilterManager ):
def getWebXmlFilterOrder() {
[auditFilter: FilterManager.GRAILS_WEB_REQUEST_POSITION + 101]
}

getter 返回一个 Map,其中键是过滤器的名称,值是描述 web.xml 中所需位置的 int。 WebXmlConfig 提供了一个 FilterManager带有一些可以使用的位置常量的类。在这种情况下, GRAILS_WEB_REQUEST_POSITION值为 1000。

快速查看 Spring Security Core 插件描述符表明它正在放置 springSecurityFilterChain过滤 FilterManager.GRAILS_WEB_REQUEST_POSITION + 100 ,所以通过设置你的 auditFilter再高一点,它就会出现在 web.xml 中的 spring security 之下。

关于grails - 确保在 springSecurityFilterChain 之后附加来自插件的 web.xml 过滤器映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33659163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com