Spring session jdbc - 如何为单个应用程序添加多个 HttpSessionIdResolver
Posted
技术标签:
【中文标题】Spring session jdbc - 如何为单个应用程序添加多个 HttpSessionIdResolver【英文标题】:Spring session jdbc - How to add multiple HttpSessionIdResolver for a single application 【发布时间】:2020-07-11 17:28:03 【问题描述】:我在为单个 Spring 应用程序注入多个 HttpSessionIdResolver 时遇到问题。
对于普通的 Web 应用程序,我想使用 CookieHttpSessionIdResolver 对于 Rest API,我会选择 HeaderHttpSessionIdResolver,Rest API url 将类似于“/api/**”
在内部 spring 设置一个 bean 并将该 bean 用于所有请求(在这种情况下为 HeaderHttpSessionIdResolver 并且我的网络停止工作,因为我没有为每个请求设置 X-Auth-Token 标头)但我想覆盖它。 谁能帮帮我。
谢谢。
@EnableJdbcHttpSession(maxInactiveIntervalInSeconds = 3600)
public class SessionConfig extends AbstractHttpSessionApplicationInitializer
@Autowired
@Qualifier("userDatabase")
private DataSource dataSource;
@Bean
public DataSource dataSource()
return dataSource;
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource)
return new DataSourceTransactionManager(dataSource);
@Bean(value = "httpSessionIdResolver")
public HttpSessionIdResolver httpSessionIdResolver()
return HeaderHttpSessionIdResolver.xAuthToken();
@Bean(value = "cookieHttpSessionIdResolver")
public HttpSessionIdResolver cookieHttpSessionIdResolver()
return new CookieHttpSessionIdResolver();
【问题讨论】:
1.这不是@Configuration
类。 2. 你正在使用自动配置的 Spring BOot,所以放弃这个类,只定义 2 个 bean。
内部EnableJdbcHttpSession注解使用@Configuration
它没有。如果您只是使用正确的机制来使用 spring-session 和 spring-boot,那么您也不需要它。你正在解决它。
【参考方案1】:
我重写了 spring 会话以启用基于 cookie 和标头的会话。 现在它工作正常。
目前我正在检查包含 /api/* 的 URL,如果它包含我正在使用基于标头的其他基于 cookie 的会话。
【讨论】:
能否发布示例实现?以上是关于Spring session jdbc - 如何为单个应用程序添加多个 HttpSessionIdResolver的主要内容,如果未能解决你的问题,请参考以下文章
带有 JDBC 配置的 Spring-Session:表 'test.spring_session' 不存在
为 spring-session-jdbc 使用现有的 Spring Boot 数据源