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 数据源

使用 JDBC 时如何为 SQL 语句启用日志记录

Java Spring JDBC SPRING_SESSION 表不存在

如何为 ClickHouse jdbc 连接设置会话时区?

如何为 DB2 的 JDBC 驱动程序配置 TCP keepAliveTimeout?