Thi*_*lak 6 spring spring-mvc spring-session
我正在使用我的 Web 应用程序评估 spring-session。在对 Web 应用程序的第一个请求期间,为单个客户端创建了多个 httpsession。经过调试我发现问题是,响应在到达 SessionRepositoryFilter 之前由 ShallowEtagHeaderFilter 在过滤器链中更早地提交,因此添加到响应中的 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;
}
Run Code Online (Sandbox Code Playgroud)
过滤器由以下人员注册:
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addFilter("sessionFilter", DelegatingFilterProxy.class)
.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");
}
Run Code Online (Sandbox Code Playgroud)
小智 0
正如您在评论中提到的,您可以为任何url-pattern使用注册过滤器web.xml:
<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
或者以spring 的方式,您可以在应用程序配置类中执行此操作,如下所示:
@Configuration
public class WebAppConfig implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
servletContext
.addFilter("sessionFilter", DelegatingFilterProxy.class)
.addMappingForUrlPatterns(null, false, "/*");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2787 次 |
| 最近记录: |