Область 'сессия' не активна для текущего потока; IllegalStateException: не найден связанный с потоком запрос

У меня есть контроллер, который я хотел бы быть уникальным для каждой сессии. Согласно весенней документации есть две детали реализации:

1. Начальная веб-конфигурация

Чтобы поддерживать область действия bean-компонентов на уровне запросов, сеансов и глобальных сеансов (bean-объекты bean-scoped), перед определением ваших bean-компонентов требуется небольшая начальная конфигурация.

Я добавил следующее к моемуweb.xml как показано в документации:

<listener>
  <listener-class>
    org.springframework.web.context.request.RequestContextListener
  </listener-class>
</listener>

2. Область применения бобов как зависимости

Если вы хотите внедрить (например) компонент области действия HTTP-запроса в другой компонент, вы должны внедрить прокси-сервер AOP вместо этого компонента.

Я аннотировал боб@Scope предоставляяproxyMode как показано ниже:

@Controller
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class ReportBuilder implements Serializable {
    ...
    ...
}

проблема

Несмотря на вышеуказанную конфигурацию, я получаю следующее исключение:

org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'scopedTarget.reportBuilder': область 'сеанс' не активна для текущего потока; рассмотрите возможность определения прокси-объекта с заданной областью действия для этого компонента, если вы собираетесь ссылаться на него из одноэлементного объекта; Вложенное исключение - java.lang.IllegalStateException: не найден привязанный к потоку запрос: Вы ссылаетесь на атрибуты запроса вне фактического веб-запроса или обрабатываете запрос вне первоначально получающего потока? Если вы действительно работаете в веб-запросе и по-прежнему получаете это сообщение, ваш код, вероятно, выполняется за пределами DispatcherServlet / DispatcherPortlet: в этом случае используйте RequestContextListener или RequestContextFilter, чтобы отобразить текущий запрос.

Обновление 1

Ниже мой компонент сканирования. У меня есть следующее вweb.xml:

<context-param>
  <param-name>contextClass</param-name>
  <param-value>
    org.springframework.web.context.support.AnnotationConfigWebApplicationContext
  </param-value>
</context-param>

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>org.example.AppConfig</param-value>
</context-param>

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

И следующее вAppConfig.java:

@Configuration
@EnableAsync
@EnableCaching
@ComponentScan("org.example")
@ImportResource("classpath:applicationContext.xml")
public class AppConfig implements AsyncConfigurer {
  ...
  ...
}

Обновление 2

Я создал воспроизводимый контрольный пример. Это гораздо меньший проект, поэтому есть различия, но возникает та же ошибка. Там довольно много файлов, поэтому я загрузил его какtar.gz вmegafileupload.

Ответы на вопрос(8)

Ваш ответ на вопрос