SpringBoot集成spring-session

Spring Session是spring的項目之一。node

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

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

Spring Session提供了一套建立和管理Servlet HttpSession的方案。Spring Session提供了集羣Session(Clustered Sessions)功能,默認採用外置的Redis來存儲Session數據,以此來解決Session共享的問題。web

本文主要介紹下SpringBoot集成spring session的步驟redis

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的信息了spring

相關文章
相關標籤/搜索