3、Spring Session-使用Hazelcast的HttpSession

4.4. 使用Hazelcast的HttpSession

在使用HttpSession的任何功能之前通过添加一个Servlet过滤器,就可以启用Spring Session。

本节主要介绍基于Java配置如何使用Hazelcast支持HttpSession。

Hazelcast Spring样例提供了一个可执行的样例,这个样例提供了如何基于Java配置整合Spring Session和HttpSession。你可以阅读以下的一些基础步骤,但是当您与自己的应用程序整合时,推荐遵循详细的Hazelcast Spring参考指南。

4.4.1. Spring 配置

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

@EnableHazelcastHttpSession 
@Configuration
public class HazelcastHttpSessionConfig {
    @Bean
    public HazelcastInstance hazelcastInstance() {
        MapAttributeConfig attributeConfig = new MapAttributeConfig()
                .setName(HazelcastSessionRepository.PRINCIPAL_NAME_ATTRIBUTE)
                .setExtractor(PrincipalNameExtractor.class.getName());

        Config config = new Config();

        config.getMapConfig("spring:session:sessions") 
                .addMapAttributeConfig(attributeConfig)
                .addMapIndexConfig(new MapIndexConfig(
                        HazelcastSessionRepository.PRINCIPAL_NAME_ATTRIBUTE, false));
        return Hazelcast.newHazelcastInstance(config); 
    }
}
  1. @EnableHazelcastHttpSession 注解创建了一个实现了Filter的名为springSessionRepositoryFilter 的Bean(过滤器),这个过滤器负责使用Spring Session支持的一个实现去替换HttpSession,这个实例中Spring Session由Hazelcast支持;
  2. 为了支持按principal name index检索会话,需要注册适当的ValueExtractor。Spring Session为此提供了PrincipalNameExtractor。
  3. 创建一个HazelcastInstance链接Spring Session和Hazelcast,默认情况下,一个嵌入的Hazelcast 默认实例会被启动并被应用所链接。关于更多配置Hazelcast的信息,可以参考参考文档

4.4.2. Servlet容器初始化

Spring配置文件创建了一个实现了Filter的名为springSessionRepositoryFilter 的Bean,springSessionRepositoryFilter负责使用一个支持Spring Session的个性化实现替换HttpSession。

为了让我们的Filter发挥它的魔力,Spring需要加载我们的SessionConfig 类。由于我们的应用程序已经使用SecurityInitializer类加载了Spring配置,所以我们可以简单地添加我们的SessionConfig类。

src/main/java/sample/SecurityInitializer.java
public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {

    public SecurityInitializer() {
        super(SecurityConfig.class, SessionConfig.class);
    }
}

最后我们需要确保Servlet容器(如Tomcat)的每个请求都使用了springSessionRepositoryFilter,非常重要的一点就是Spring Session的springSessionRepositoryFilter 必须在Spring Security’s springSecurityFilterChain之前被调用。这样就能够确保Spring Security使用的HttpSession也被Spring Session支持。幸运的是,Spring Session提供了一个很有效的名为AbstractHttpSessionApplicationInitializer的类,这个类会让实现以上的这些功能变得非常的容易。请看下面的例子:

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

}

我们自己的类(Initializer )的命名我们并不关心,最重要的是要继承AbstractHttpSessionApplicationInitializer。

继承AbstractHttpSessionApplicationInitializer 之后我们就能确保名为springSessionRepositoryFilter 的Spring Bean被注册到Servlet容器中,并且对于每一个请求的处理他都会处在Spring Security’s springSecurityFilterChain过滤器链中的所有过滤器之前。

原文:https://docs.spring.io/spring-session/docs/2.0.0.M4/reference/html5/#httpsession-hazelcast

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值