Не должно быть проблем при интеграции jcaptcha с Spring Session. Пока существует способ загрузки сеанса из Redis (в данном случае через cookie-файл SESSION) и сеанс существует, вызов request.getSession()
или request.getSession(false)
вернет сеанс, поддерживаемый Redis.
Это работает в любом фильтре и сервлете, который называется ПОСЛЕ springSessionRepositoryFilter. Если вы посмотрите на исходный код SessionRepositoryFilter
, вы увидите, что HttpServletRequest
поменялся местами с SessionRepositoryRequestWrapper
.
Таким образом, ваш SimpleImageCaptchaServlet
и любой сервлет, который вы используете для проверки ответа пользователя, получат SessionRepositoryRequestWrapper, который, по-видимому, даст вам доступ к сеансу с поддержкой Redis.
Тогда проблема может быть в вашей конфигурации; springSessionRepositoryFilter может быть не зарегистрирован в контейнере, тем более что вы используете как web.xml, так и сервлет 3.0+ WebApplicationInitializer
. Если ваше приложение работает правильно, то ваш web.xml, скорее всего, работает нормально. Вы используете WebApplicationInitializer
для загрузки вашего web.xml? Если нет, то, возможно, ваш Java Config не загружается. Убедитесь, что ваш web.xml каким-то образом загружает вашу конфигурацию, возможно, включив сканирование компонентов (<context:component-scan/>
) в файле конфигурации contextLoaderListener xml для загрузки вашей конфигурации Java вместе с:
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
для загрузки конфигурации, которая создаст фильтр, который вы затем должны добавить в свой web.xml:
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
Проверьте ссылку Spring Session на XML config