session共享方案解决方案(利用redis+Spring Session 方案解决)
1、在idea中创建一个spring boot 的父maven工程,再创建一个moudle 名demo1,创建一个SessionControllerd代码如下:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Controller
public class SessionController {
@ResponseBody
@RequestMapping("/addsession") //创建一个session
public void setSession(HttpServletRequest request)
{
HttpSession session=request.getSession();
if(session.getAttribute("user")==null)
{
session.setAttribute("user","laijianliang");
System.out.println("不存在session");
}
else {
System.out.println("存在session");
}
}
@RequestMapping("/getsession") //根据session的key,获取session
@ResponseBody
public String getSession(HttpServletRequest request)
{
HttpSession session=null;
String s=null;
try{
session=request.getSession(false);
s= (String)session.getAttribute("user");
}
catch (Exception e){
return s+"8081";
}
return s+"8081";
}
}
2、创建另一个名为demo2的moudle,同样建立一个SessionController,代码如下:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@RestController
@RequestMapping("")
public class SessionController {
@Value("${server.port}")
private String port;
@RequestMapping("")
public String hello()
{
return "该服务器的端口是:"+port;
}
@RequestMapping("/hello")
public String hello2()
{
return "该服务器的端口是:"+port+"我是hello";
}
@RequestMapping("/getsession")
@ResponseBody
public String getSession(HttpServletRequest request) //获取session
{
HttpSession session=null;
String s=null;
try{
session=request.getSession(false);
s= (String)session.getAttribute("user");
}
catch (Exception e){
return s+"8080";
}
return s+"8080";
}
}
3、在父工程中导入如下依赖:其中最重要的依赖是spring-session-data-redis,一旦导入这个依赖你创建一个httpsession时会把该session的基本信息保存到redis中。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-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>
</dependencies>
4、确保开启redis服务器
5、分别启动demo1与demo2项目(注意在application.yml中设置两个不同的端口号,否则会出现端口占用现象)
在8081服务器中添加一个session
然后可以得到session的值
在8080端口可以取到8081的session的值,这就解决了session在不同服务器的共享问题