SpringBoot集成spring-session

Spring Session是spring的项目之一。

GitHub地址:https://github.com/spring-projects/spring-session。

官方文档:http://docs.spring.io/spring-session/docs/2.0.0.M3/reference/

Spring Session提供了一套创建和管理Servlet HttpSession的方案。Spring Session提供了集群Session(Clustered Sessions)功能,默认采用外置的Redis来存储Session数据,以此来解决Session共享的问题。

本文主要介绍下SpringBoot集成spring session的步骤

1.引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session</artifactId>
    <version>1.2.2.RELEASE</version>
</dependency>

2.新增redis操作类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;


@Component
public class RedisComponent {
   
   @Autowired
   //操作字符串的template,StringRedisTemplate是RedisTemplate的一个子集
   private StringRedisTemplate stringRedisTemplate;
   
   @Autowired
   // RedisTemplate,可以进行所有的操作  
   private RedisTemplate<Object,Object> redisTemplate;
   
   public void set(String key, String value){
      ValueOperations<String, String> ops = this.stringRedisTemplate.opsForValue();
      boolean bExistent = this.stringRedisTemplate.hasKey(key);
      if (bExistent) {
         System.out.println("this key is bExistent!");
      }else{
         ops.set(key, value);
      }
   }
   
   public String get(String key){
      return this.stringRedisTemplate.opsForValue().get(key);
   }
   
   public void del(String key){
      this.stringRedisTemplate.delete(key);
   }
   

   public String sentinelGet(String key){
      return stringRedisTemplate.opsForValue().get(key);
   }
}

3.配置SessionConfig

import org.springframework.context.annotation.Bean;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.session.web.http.CookieHttpSessionStrategy;
import org.springframework.session.web.http.HttpSessionStrategy;

@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 24 * 60 * 60)
public class SessionConfig {

    @Bean
    public HttpSessionStrategy httpSessionStrategy() {
        /**
         * sessionID的传递方式接口。目前spring-session自带两个实现类
         * 1.cookie方式 :CookieHttpSessionStrategy
         * 2.http header 方式:HeaderHttpSessionStrategy
         * 当然,我们也可以自定义其他方式。
         */
        return new CookieHttpSessionStrategy();
    }
}

4.sentinel配置

spring.redis.database=0

# pool settings ...池配置
spring.redis.pool.max-idle=10
spring.redis.pool.min-idle=1
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1

#哨兵监听redis server名称
spring.redis.sentinel.master=xxx
#哨兵的配置列表
spring.redis.sentinel.nodes=192.168.131.13:26379,192.168.131.13:26380,192.168.131.13:26381

5.配置spring session使用redis作为session存储方式

spring.session.store-type=redis

6.使用方式

@RequestMapping("hello")
@ResponseBody
public String hello (HttpServletRequest request){

    HttpSession session = request.getSession();
    session.setAttribute("username","world");
    return session.getId();
}

查看到redis里面已经有session的信息了

猜你喜欢

转载自my.oschina.net/u/3070368/blog/1499720