如何覆盖 Grails 4 中插件采用的 URL 映射?

问题描述

在 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!