#grails
#grails
Вопрос:
У меня есть несколько контроллеров и служб, которые извлекают значения из grailsApplication, используя аннотацию PostConstruct. Все это работало нормально в 2.4.0 и раньше, но внезапно после обновления до 2.4.2 я теперь получаю ошибку при запуске:
Сообщение: ошибка при создании компонента с именем ‘com.domain.AuthenticationController’: не удалось вызвать метод инициализации; вложенное исключение — java.lang.Исключение IllegalStateException: запрос, связанный с потоком, не найден: вы ссылаетесь на атрибуты запроса вне фактического веб-запроса или обрабатываете запрос вне первоначально принимающего потока? Если вы на самом деле работаете с веб-запросом и все еще получаете это сообщение, ваш код, вероятно, выполняется за пределами DispatcherServlet / DispatcherPortlet: в этом случае используйте RequestContextListener или RequestContextFilter, чтобы предоставить текущий запрос.
Рассматриваемый метод инициализации:
@PostConstruct
def init() {
tokenValidity = grailsApplication.config.user.accessToken.validity
}
Как вы можете видеть, я вообще не использую и не ссылаюсь на объект запроса в методе init. Похоже, это связано с моим использованием конфигурации.
Буду признателен за любую помощь.
Ответ №1:
Похоже, в вашем приложении не установлен плагин webxml. Пожалуйста, дважды проверьте это.
Комментарии:
1. Вы правы, но зачем мне нужен плагин webxml и почему он будет работать до версии 2.4.2 без плагина webxml?
2. Я не уверен в проблеме, но ответ заключается в том, что этот плагин определяет определенный порядок фильтров в сгенерированном web.xml досье. Это необходимо только в том случае, если фильтры вашего любого плагина должны находиться в определенном положении относительно фильтров, добавленных Grails или другими плагинами.