Проблема с несколькими вкладками и атрибутом SessionAttribute

У меня есть приложение, разработанное в Spring MVC, и в каждом контроллере я применяю его как SessionAttribute для соответствующей формы, чтобы иметь возможность перенаправлять в каждом методе и сохранять одинаковые URL независимо от того, что я делаю (всегда перенаправлять на URL, который загружает шаблон). , Дело в том, что он не упал настолько далеко, что, если я открою 2 вкладки, первая не будет работать правильно (так как атрибут SessionAttribute будет последним загруженным, то есть на последней вкладке).

Пройдя немного, мне удалось найти решение, которое вы можете увидеть здесь (на английском языке), проблема в том, что после его реализации теперь каждый раз, когда я пытаюсь загрузить SessionAttribute из любого места, он говорит мне, что он не существует , Вот трассировка:

org.springframework.web.HttpSessionRequiredException: ожидаемый атрибут сеанса 'customSearch' в org.springframework.web.method.annotation.ModelFactory.initModel (ModelFactory.java:103) по адресу org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod (RequestMappingHandlerAdapter.java:722) по адресу org.springframework.web.servlet.mvapp.app.papp.qua в org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle (AbstractHandlerMethodAdapter.java:80) в org.springframework.web.servlet.DispatcherServlet.doDispatch.doservlet.jserlet.jb .DispatcherServlet.doService (DispatcherServlet.java:856) в org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:936) в org.springframework.web.servlet.Framedov ( Ява x.servlet.http.HttpServlet.service (HttpServlet.java:622) в org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:812) в javax.servlet.http.HttpServt.service 729) в org.apache. .doFilterInternal (CharacterEncodingFilter.java:88) в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в org.apache.catalina.core.ApplicationFilterCFilin.Filter. apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:330) в org.springframework.security.web.access.intercept. FilterSecurityInterceptor.invoke (FilterS ecurityInterceptor.java:108) в org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter (FilterSecurityInterceptor.java:84) в org.springframework.security.web.FilterChainProha (VirtualFilder). в org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke (FilterSecurityInterceptor.java:118) в org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter: FilterSecurityIn84: FilterSecurity .security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) в org.springframework.security.web.access.ExceptionTranslationFilter.doFilter (исключительная ситуация .doFilter (FilterChainProxy.java:342) в org.springframework.security.web.session.SessionManagementFilter.doFilter (SessionManagementFilter.java:103) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:342) в org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter (AnonymousAuthenticationFilter.java:113) в org.springframework.secterCha.F.

0
задан 17.03.2016, 16:34
1 ответ

Основанный на описании твоей проблемы и чате пути чате, лучшее было бы что ты использовал кэш объектов, с которыми ты работаешь. Таким образом, твои операции против базы данных будут меньше и у тебя будет лучший результат в момент получения данных, которых нужно показывать в твоих просьбах GET. Решение кэша состоит в том, чтобы использовать существующие книжные магазины для этого конус EhCache или в зависимости от твоей необходимости ты можешь использовать Hazelcast или другие.

Относительно conversation scope, о котором ты упоминаешь, я рекомендую тебе не использовать это, так как он очень хрупкий. Зависит много одного параметра, который перемещает путь query string, и если какой-то пользователь меняет Вашу стоимость, тогда сломай контроль, который у тебя есть в этой закладке.

0
ответ дан 24.11.2019, 14:43