shing boot 做session共享 redis

不羁岁月 提交于 2020-03-01 16:40:33

因为多台服务器负载均衡,在获取客户端的sessionId的时候,会出现第一次和第二次不一样,因为负载均衡的缘故,你的服务器最少两台,那么客户端连接第一次请求和第二次请求如果不是同一台服务器的时候那么sessionId就会变,为了解决这个问题,我想到了session共享,如果两台服务器的session都存在redis上,那就不会有问题了

第一步pom文件引入jia包

<!--redis配置开始-->
<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session-data-redis</artifactId>
</dependency>
<!--redis配置结束-->

第二部配置文件配置redis

spring.redis.database=1
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.pool.max-active=20
spring.redis.pool.min-idle=20

第三步设置redissession配置

package com.hisun.framework;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.ConfigureRedisAction;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

//用户session的生效时间是使用的这个单位是秒
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 7 * 24 * 3600)
public class RedisSessionConfig {

	@Bean
    public ConfigureRedisAction configureRedisAction() {
        //如果是自己搭建的redis或者阿里云redis此处可以没有,因为开发了redis的config命令,但是亚马逊的redis是不开发config命令的,必须要此段代码
        return ConfigureRedisAction.NO_OP;
    }
}

这三部配置好就实现了session共享

测试截图

测试controller代码

package com.hisun.test.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.hisun.framework.controller.CommonController;

@RestController
@RequestMapping("/${sys.name}")
public class RoomController extends CommonController {

    @RequestMapping(value = "/web/testsession", method = RequestMethod.GET)
    public String testsession(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
    	String sss = session.getId();
    	return sss;
    }
    
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!