spring boot 入门之spring session&RESTful APIs
教程分享
>
Java教程
>
Spring
(11561)
2024-08-07 11:05:25
一.简介
spring boot 入门之spring session实现restful apis。通过前面的了解和使用,我们知道可以通过spring boot或者spring mvc整合spring session的方式来实现session的共享达到应用可以水平扩展集群。session默认情况是存了一个cookie在响应的数据里面,然后每次通过cookie来验证session的,但是restful设计中一般不会使用cookie,所以spring session提供了将session id存放在http协议的header中,本文主要讲解如何使用。
二.编码介绍
HttpSession & RESTful APIs
原理:Spring Session 可以允许session在header里面提供来实现RESTful APIs
Spring配置
在创建一个spring boot项目后,加入相关的依赖。现在我们就可以来进行相关配置。这个配置主要负责创建一个servlet Filter替换原有的HttpSession 使用spring session.主要添加以下spring 相关配置:
@Configuration
@EnableRedisHttpSession //①
public class HttpSessionConfig {
@Bean
public LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory(); //②注意,spring boot项目这里不需要创建一个链接工厂,在application配置文件中配置了相关信息会默认生成一个链接工厂供使用。
}
@Bean
public HttpSessionStrategy httpSessionStrategy() {
return new HeaderHttpSessionStrategy(); //③
}
}
①
@EnableRedisHttpSession
注解用来创建一个spring的过滤器类,类的名称为
springSessionRepositoryFilter
这个过滤器用来替换原生的
HttpSession
使用spring session。这个例子中,Spring Session通过Redis来实现存储。
②创建了一个
RedisConnectionFactory
来使Spring Session链接到Redis Server。关于spring data redis相关配置可以参考之前的spring redis整合。(注意,spring boot项目这里不需要创建一个链接工厂,在application配置文件中配置了相关信息会默认生成一个链接工厂供使用。)
③我们自定义了Spring Session的HttpSession ,将它整合到了HTTP协议的header里面,替换掉默认的放在cookie中。
HttpSessionListener 即session监听处理
Spring Session支持
HttpSessionListener
,通过将
SessionDestroyedEvent
和SessionCreatedEvent转换成
HttpSessionEvent
被定义在SessionEventHttpSessionListenerAdapter来实现。需要使用监听,注意以下几点:
- 确保你所实现的
SessionRepository
支持并且配置到启动SessionDestroyedEvent
和SessionCreatedEvent
- 将
SessionEventHttpSessionListenerAdapter
配置为spring容器中的一个bean
- 注入每一个
HttpSessionListener
到SessionEventHttpSessionListenerAdapter
如果你使用Redis的方式记录HttpSession,你需要将每一个HttpSessionListener配置为bean。例如,假设你想要支持Spring Security的并发控制,并且需要使用HttpSessionEventPublisher,你可以简单地将HttpSessionEventPublisher添加为一个bean。 在Java配置中,这可能如下所示:
@Configuration
@EnableRedisHttpSession
public class RedisHttpSessionConfig {
@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}
// ...
}
或者xml
<bean class="org.springframework.security.web.session.HttpSessionEventPublisher"/>
https://www.leftso.com/article/299.html