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