我正在使用我的 Web 应用程序评估 spring-session。在对 Web 应用程序的第一次请求期间,正在为单个客户端创建多个 httpsession。调试后发现问题是,响应是在过滤器链中较早的被 ShallowEtagHeaderFilter 在到达 SessionRepositoryFilter 之前提交的,所以添加到响应中的 cookie 并没有发送到客户端。因此,每个进一步的 ajax 请求都会创建一个新会话,但会话 ID 未在 cookie 中设置。
我试图在 ShallowEtagHeaderFilter 之后移动 SessionRepositoryFilter。有办法吗?
过滤器配置:
@Bean
public SessionRepositoryFilter sessionFilter(RedisOperationsSessionRepository sessionRepository) {
HttpSessionStrategy cookieStrategy = new CookieHttpSessionStrategy();
((CookieHttpSessionStrategy) cookieStrategy).setCookieName("JSESSIONID");
SessionRepositoryFilter sessionRepositoryFilter = new SessionRepositoryFilter(sessionRepository);
sessionRepositoryFilter.setHttpSessionStrategy(cookieStrategy);
return sessionRepositoryFilter;
}
过滤器注册者:
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addFilter("sessionFilter", DelegatingFilterProxy.class)
.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");
}