我创建了一个新的Grails项目,添加了Spring Security插件并实现了简单的Voter。我需要在该选民中获取控制器/动作/ ID参数。
有2个控制器:DefaultController
和ExplicitController
。
我的映射是自动生成的,并且按照名称约定包含默认映射。此外,还有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上进行了测试
答案 0 :(得分:-2)
我不明白您要做什么。您是否正在尝试让一个控制器像“拦截器”一样工作? https://objectcomputing.com/resources/publications/sett/september-2015-grails-3-interceptors
在这种情况下,您将使用拦截器并执行以下操作:
匹配控制器:“显式”