session共享方案解决方案(利用redis+Spring Session 方案解决)

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在不同服务器的共享问题
在这里插入图片描述

6、进入redis的客户端,看是否存session数据,发现果然有关数据。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值