我正在使用Spring Session进行会话管理。同时,我们的应用程序中有一些REST API,我们也想使用基于令牌的身份验证。
因此,我们想一起启用2 HttpSessionStrategy CookieHttpSessionStrategy和HeaderHttpSessionStrategy。这样,我们的应用程序可以同时认证cookie和令牌。
我正在一起试验 Spring Boot 和 Spring 会话,特别是使用 JDBC。
只需在 application.properties 中添加以下行:
spring.session.store-type=jdbc
Run Code Online (Sandbox Code Playgroud)
让它正常工作,这很好,因为我碰巧在该文件中也有一些数据源属性,即
myapp.datasource.url=jdbc:mysql://localhost/etc...
myapp.datasource.driver-class-name=com.mysql.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)
但我实际上是通过自己的配置将它们用于我自己的数据源,如下所示:
@Configuration
@PropertySource("classpath:credentials.properties")
public class DataSourceConfig {
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "myapp.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,Spring Session 正在创建自己的数据源,而不是使用我的数据源。有什么办法可以让它使用我的吗?(我的真实数据源有一些额外的配置,其中 Hikari 未在此处显示)
我有一个端点,如示例代码块中所示。流式传输时,我通过 调用异步方法streamHelper.getStreamSuspendCount()。我正在更改状态时停止此异步方法。但当浏览器关闭且会话终止时,我无法访问此异步方法。更改状态时,我将停止会话范围内的异步方法。但当浏览器关闭且会话终止时,我无法访问此异步方法。会话关闭时如何访问此范围?
@RequestMapping(value = "/stream/{columnId}/suspendCount", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@ResponseBody
public Flux<Integer> suspendCount(@PathVariable String columnId) {
ColumnObject columnObject = streamHelper.findColumnObjectInListById(columnId);
return streamHelper.getStreamSuspendCount(columnObject);
}
getStreamSuspendCount(ColumnObject columnObject) {
...
//async flux
Flux<?> newFlux = beSubscribeFlow.get(i);
Disposable disposable = newFlux.subscribe();
beDisposeFlow.add(disposable); // my session scope variable. if change state, i will kill disposable (dispose()).
...
return Flux.fromStream(Stream.generate(() -> columnObject.getPendingObject().size())).distinctUntilChanged()
.doOnNext(i -> {
System.out.println(i);
}));
}
Run Code Online (Sandbox Code Playgroud) server-sent-events spring-boot project-reactor spring-session
如果我将 spring-session jdbc 添加到我的 vaadin-spring-boot-application 应用程序非常慢,并且在几秒钟后重新加载整个页面。其他一切看起来都正常工作。
没注意到这个问题,研究了几天,得到了这个Github问题和Vaadin微服务配置但是在这些中,我没有找到合适的解决方案来解决这个问题,任何人都可以给我一个真实的在 Vaadin 上实现Spring 会话的示例?
问候。