Grails:在投票器类中获取控制器名称

时间:2019-05-17 14:48:10

标签: grails spring-security

我创建了一个新的Grails项目,添加了Spring Security插件并实现了简单的Voter。我需要在该选民中获取控制器/动作/ ID参数。 有2个控制器:DefaultControllerExplicitController

我的映射是自动生成的,并且按照名称约定包含默认映射。此外,还有ExplicitController

的显式映射
"/$controller/$action?/$id?(.$format)?"{
        constraints {
            // apply constraints here
        }
    }
"/explicit" (controller: "explicit")

投票人:

    @Override
int vote(Authentication authentication, Object object, Collection collection) {
    grailsUrlMappingsHolder.match('/explicit/')//Works
    grailsUrlMappingsHolder.match('/default/') //Doesn't work

    return 1
}

默认控制器:

def index() {
    grailsUrlMappingsHolder.match('/explicit/') //Works
    grailsUrlMappingsHolder.match('/default/')  //Works
}

我不知道为什么我无法使用选民中DefaultController的URL获得控制器名称。 崩溃

Unable to establish controller name to dispatch for [org.grails.web.mapping.RegexUrlMapping$1@47724723]. Dynamic closure invocation returned null. Check your mapping file is correct, when assigning the controller name as a request parameter it cannot be an optional token!

有没有解决方法?

查看项目来源here

在Grails 3.3.3和3.3.9上进行了测试

1 个答案:

答案 0 :(得分:-2)

我不明白您要做什么。您是否正在尝试让一个控制器像“拦截器”一样工作? https://objectcomputing.com/resources/publications/sett/september-2015-grails-3-interceptors

在这种情况下,您将使用拦截器并执行以下操作:

匹配控制器:“显式”

相关问题