Я создал новый проект Grails, добавил плагин Spring Security и внедрил простой Voter.Мне нужно получить параметры контроллера / действия / идентификатора у этого избирателя.Существует 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
}
Понятия не имею, почему я могу 't получить имя контроллера, используя URL-адрес DefaultController в избирателе.Сбой при
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!
Есть ли обходные пути?
См. Источники проекта здесь
Протестировано на Grails 3.3.3 и 3.3.9