Как правильно расширить WebAuthenticationDetails? - PullRequest
0 голосов
/ 15 апреля 2019

Сборка приложения Spring Boot, развертывание (путем копирования в папку webapps, когда Tomcat не работает) на локальный Tomcat8. Всегда получаю ошибку:

Нет запроса на привязку к потоку: Вы имеете в виду атрибуты запроса за пределами реального веб-запроса или обрабатываете запрос за пределами первоначально принимающего потока? Если вы действительно работаете в веб-запросе и по-прежнему получаете это сообщение, ваш код, вероятно, выполняется за пределами DispatcherServlet / DispatcherPortlet: В этом случае используйте RequestContextListener или RequestContextFilter для предоставления текущего запроса.

Как я понимаю, проблемы при создании экземпляра bean-компонента с расширением WebAuthenticationDetails:

    @Component
    public class AuthDetails extends WebAuthenticationDetails{

        private final AuthTarget authTarget;

        public AuthDetails(HttpServletRequest request) {
            super(request);
            this.authTarget = AuthTarget.valueOf(request.getParameter("target"));
        }

        public AuthTarget getAuthTarget(){
            return this.authTarget;
        }
    }

Он не может предоставить HttpServletRequest для построения бина, но я не знаю, как его избежать.

Пытался добавить RequestContextListener, в xml или как реализацию (и пометить как @WebListener), безрезультатно.

Нет идей, как это исправить. Пробный пример отсюда: https://github.com/Baeldung/spring-security-registration, без изменений - та же ошибка в аналогичном месте.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 16 апреля 2019

Ключ был прост: я должен явно указать bean-компонент фильтра в конфигурации безопасности extends WebSecurityConfigurerAdapter:

@Bean
AuthFilter authFilter() throws Exception{
    AuthFilter authFilter = new AuthFilter();
    return authFilter;
}

вместо автоматического подключения.

...