Grails: получить имя контроллера в классе избирателей - PullRequest
0 голосов
/ 17 мая 2019

Я создал новый проект 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

1 Ответ

0 голосов
/ 17 мая 2019

Я не понимаю, что вы пытаетесь сделать.Вы пытаетесь заставить один контроллер действовать как «Перехватчик» ??https://objectcomputing.com/resources/publications/sett/september-2015-grails-3-interceptors

В этом случае вы будете использовать перехватчик и сделайте следующее:

Контроллер соответствия: 'явный'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...