使用postman测试接口,解决Session共享问题

女生的网名这么多〃 提交于 2020-02-27 12:32:55

问题:

在做登录模块时,使用Postman做接口测试,发现session不能共享问题:第一次请求将系统随机生成验证码放入Session中,第二次请求想要获取系统生成的验证码,但是取到的值为null,因此无法判断登录条件是否满足。

问题发现与解决:

验证码信息:

{
     "status" :   200 ,
     "msg" :   "发送成功" ,
     "data" :   "810661"
}
 

登录接口,登录时发现验证码不正确, 两次获取的sessionid不一致,导致在登录时候,没有获取session中的验证码! ,第二次接口访问从session获取的验证码的值是null,因此返回验证码不正确:

最后也就是将这个问题归咎于 验证码的获取与验证,在AController里面获取生成验证码,放到session,如何在BController里面获取? 也就是我们常件的spring如何共享controller里面的session问题!

SessionSetController

@RestController
public class SessionSetController {
    
    @GetMapping(value = "/set")
    public String setSessionAttribute(HttpSession session){
        String uuid = UUID.randomUUID().toString();
        session.setAttribute("uuid",uuid);
        return uuid;
    }
}

SessionGetController

@RestController
public class SessionGetController {

    @GetMapping(value = "/get")
    public Boolean getSessionAttribute(HttpSession session){
        String uuid = (String) session.getAttribute("uuid");
        if ("uuid".equals(uuid)){
            return true;
        }else {
            return false;
        }
    }
}

测试发现,从第二个session获取到的验证码是空的:

原因分析

后台的跨域导致session失效

结论:

正常情况下,不同controller之间的session是没有共享的,要实现session之间的共享,需要通过其他方法来实现,比如 Spring Session 分布式存储 Session 、使用 Redis+Token的方式 两种常见的方式。

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