5、Spring Session-HttpSession & RESTful APIs

4.7. HttpSession & RESTful APIs

Spring Session允许在header中提供会话来与RESTful APIs一起工作。

REST Sample提供了一个在REST应用中如何使用Spring Session支持使用header的身份认证。你可以参考一下基础步骤进行整合,但是在您自己的应用中,推荐遵循详细的REST Guide。

4.7.1. Spring 配置

添加完成必要依赖之后,我们可以创建我们的Spring配置。Spring配置负责创建一个Servlet过滤器,这个过滤器通过一个使用Spring Session支持的实现去替换HttpSession。添加如下的Spring配置:

@Configuration
@EnableRedisHttpSession 
public class HttpSessionConfig {

    @Bean
    public LettuceConnectionFactory connectionFactory() {
        return new LettuceConnectionFactory(); 
    }

    @Bean
    public HttpSessionStrategy httpSessionStrategy() {
        return new HeaderHttpSessionStrategy(); 
    }
}
  1. @EnableRedisHttpSession 注解创建了一个名为springSessionRepositoryFilter的Bean,这个Bean实现了Filter接口。过滤器负责使用Spring Session支持的一个实现去替换HttpSession,这个实例中Spring Session由Redis支持。
  2. 我们创建一个RedisConnectionFactory 链接Spring Session和Redis服务器,我们配置的connection是链接到本地机器的默认端口(6379),关于更多关于Spring Data Redis的配置信息,可以参考参考文档
  3. 我们个性化Spring Session的HttpSession集成使用HTTP头代替cookies来传到当前会话信息。

4.7.2. Servlet容器初始化

我们Spring配置创建了一个名为springSessionRepositoryFilter且实现了Filter。springSessionRepositoryFilter这个Bean呢,主要负责使用Spring Session支持的一个个性化实现来替换HttpSession。

为了让我们的Filter发挥它的魔力,Spring需要加载我们的Config类。在我们的Spring MvcInitializer类中已经提供了这个配置:

src/main/java/sample/mvc/MvcInitializer.java
@Override
protected Class<?>[] getRootConfigClasses() {
    return new Class[] { SecurityConfig.class, HttpSessionConfig.class };
}

最后我们需要确保每次请求Servlet容器都使用了springSessionRepositoryFilter。幸运的是,Spring Session提供了一个很有效的名为AbstractHttpSessionApplicationInitializer的类,此类可以很容易的让我们实现确保每次请求Servlet容器都使用了springSessionRepositoryFilter。我们只需要简单的集成这个类并使用它的默认构造函数即可:

src/main/java/sample/Initializer.java
public class Initializer extends AbstractHttpSessionApplicationInitializer {
}

不用关心我们自己的类(Initializer )的名称,我们只需要继承AbstractHttpSessionApplicationInitializer 就行。

4.8. HttpSessionListener

Spring Session支持通过声明SessionEventHttpSessionListenerAdapter将SessionDestroyedEvent和SessionCreatedEvent转化为HttpSessionEvent来支持HttpSessionListener。要使用这个支持,你需要做如下事情:

  1. 确保SessionRepository实现的支持且被配置成触发SessionDestroyedEvent和SessionCreatedEvent。
  2. 配置SessionEventHttpSessionListenerAdapter作为Spring Bean.
  3. 注入每一个HttpSessionListener到SessionEventHttpSessionListenerAdapter

如果你使用的是 HttpSession with Redis的配置支持,之后你需要注册所有的HttpSessionListener作为Bean。比如,假设你想支持Spring Security’s 并发控制且需要使用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://docs.spring.io/spring-session/docs/2.0.0.M4/reference/html5/#httpsession-rest

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值