当尝试访问 GemFire 会话对象时,自定义 Servlet 过滤器会使用容器的会话对象。会话对象的类型为:
org.apache.catalina.session.StandardSessionFacade@517957e2
但是从Controller,它工作正常。会话对象的类型为: org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper$HttpSessionWrapper@5afe18ce
关于我们如何配置 GemFire:
我们有一个传统的零售应用程序。最重要的是,我们使用了2.0.5GemFire 版本。在webappintializer启动时,
AnnotationConfigWebApplicationContext rootContext =
new AnnotationConfigWebApplicationContext();
rootContext.register(GemfireConfig.class,RootConfig.class, SecurityConfig.class);
由于springSessionRepositoryFilterbean没有添加到过滤器链中,我们必须DelegatingFilterProxy使用以下内容显式注册过滤器:
FilterRegistration.Dynamic springSessionRepositoryFilter =
container.addFilter("springSessionRepositoryFilter", DelegatingFilterProxy.class);
springSessionRepositoryFilter.addMappingForUrlPatterns(
EnumSet.allOf(DispatcherType.class), false, "/*");
在数据处理方面,为了获取会话对象,我们有一个 getSession 方法,它返回一个会话对象:
ServletRequestAttributes attr =
(ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpSession session = attr.getRequest().getSession();
当我们getSession()从Controller它调用该方法时,它按照设计完全正常工作。但是从 Servlet 过滤器调用相同的方法最终会获得容器创建的会话对象。
任何帮助深表感谢。
根据@John Blum 的评论重新设计,但仍然面临同样的问题。
冉冉说
一只名叫tom的猫
相关分类