shing boot 作session共享 redis

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

第一步pom文件引入jia包web

<!--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配置结束-->

第二部配置文件配置redisredis

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配置spring

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共享服务器

测试截图session

测试controller代码app

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;
    }
    
}
相关文章
相关标签/搜索