【spring boot】整合spring-session存储redis,header读取

一·背景

自己的个人项目准备做前后端分离了,也会考虑使用WebSocket,要考虑session一个读取,和存储的问题,当然这块自己写代码也可以解决,使用spring-session就可以使用现成较成熟的方案了。

二·方案选择

使用spring-session去实现也有多种方案去选择

1·session是存储:redis、jvm内存map、mongo、gemfire、hazelcast、jdbc,我这里选择存储到redis

2·session通过cookie 读取 还是通过header读取,我这里选择header

三·集成

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>1.3.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>biz.paluch.redis</groupId>
    <artifactId>lettuce</artifactId>
    <version>4.4.2.Final</version>
</dependency>

如果是自己写,不使用spring-session的话可以考虑使用:

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.0</version>
</dependency>

四·使用

1·创建session配置类

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.session.web.http.HeaderHttpSessionStrategy;
import org.springframework.session.web.http.HttpSessionStrategy;

/**
 * 说明:
 *
 * @author WangBin
 * @version v1.0
 * @date 2018/1/27/027.
 */
@Configuration
@EnableRedisHttpSession
public class HttpSessionConfig {

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;

    /**
     * RedisHttpSession 创建 连接工厂
     *
     * @return
     */
    @Bean
    public LettuceConnectionFactory connectionFactory() {
        return new LettuceConnectionFactory(host, port);
    }

    /**
     * 自定义 Token
     *
     * @return
     */
    @Bean
    public HttpSessionStrategy httpSessionStrategy() {
        HeaderHttpSessionStrategy headerHttpSessionStrategy = new HeaderHttpSessionStrategy();
        headerHttpSessionStrategy.setHeaderName("Token");
        return headerHttpSessionStrategy;
    }
}

@EnableRedisHttpSession 

public @interface EnableRedisHttpSession {
    int maxInactiveIntervalInSeconds() default 1800;

    String redisNamespace() default "";

    RedisFlushMode redisFlushMode() default RedisFlushMode.ON_SAVE;
}

可以配置session的最大存活时间 和 在redis里存储session的空间名称还有

session更新策略,有ON_SAVE、IMMEDIATE,前者是在调用SessionRepository#save(org.springframework.session.Session)时,在response commit前刷新缓存,后者是只要有任何更新就会刷新缓存

然后需要创建一个 LettuceConnectionFactory 

然后 HttpSessionStrategy 默认提供了两种实现:CookieHttpSessionStrategy和HeaderHttpSessionStrategy

因为我们考虑把 session存header读取 所以这里 使用了HeaderHttpSessionStrategy,并修改了默认的头名称x-auth-token 为Token

到此 整合完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值