问题描述
在 Grails 3.3 中,我使用了 spring-security-rest:2.0.0.M2 插件中的 RestOauthController
自定义扩展,我在 urlmappings.groovy 中将其覆盖如下:
"/oauth/access_token"(controller: "restOauthMy",action: "accesstoken",method: "POST")
但是,升级到 Grails 4 后,对 /oauth/access_token 的 POST 请求现在会指向原始控制器,我的 RestOauthMyController.accesstoken()
从未被调用。有没有办法摆脱原始的 URL 映射?更一般地说,是什么决定了 Grails 中冲突 URL 映射的优先级?
解决方法
我找到了一个在 BootStrap.groovy 中动态添加 URL 映射的功能性解决方法:
def grailsUrlMappingsHolder
def init = {
grailsUrlMappingsHolder.addMappings {
"/oauth/access_token" (controller: "restOauthMy",action: "accessToken",method: "POST")
}
}
通过这种方式,动态映射似乎具有优先权,并且我的覆盖代码会执行。
不过,我非常想知道如何正确地做到这一点。
,因此,在查看 Grails 4.0 代码(和其他插件)时,这似乎是一个特定于 spring-security-rest 的非常硬编码的端点,已停产并引入内部
因此,在他们解决问题之前,您有最好的解决方法。仍然......这是一个他们尚未修复的错误,因为当 spring-security-rest 是一个单独的插件时,功能在 3.0 中确实有效,现在它已被 BORKED!