nginx实现的分布式系统中http请求session丢失的问题

本地在两个端口启动两个服务A和B, 从A发送请求到B,B中的request.getSession()为空,获取不到当前系统(服务A)的登陆用户和所有在线用户信息。

public class RightUtil {

    public RightUtil() {
    }

    public static SessionUserInfoEntity getCurrentUser(HttpServletRequest request) {
        HttpSession session = request.getSession();
        SessionUserInfoEntity sessionUserInfoEntity = (SessionUserInfoEntity)session.getAttribute(Public.SESSION_USER_KEY);
        if (sessionUserInfoEntity != null) {
            return sessionUserInfoEntity;
        } else {
            String sessionUserInfoEntityJson = request.getHeader(Public.SESSION_USER_KEY);
            sessionUserInfoEntityJson = sessionUserInfoEntityJson == null ? request.getParameter(Public.SESSION_USER_KEY) : sessionUserInfoEntityJson;
            if (!StringUtil.isEmptyOrLength0(sessionUserInfoEntityJson)) {
                return SessionUserInfoEntity.fromCookieJson(sessionUserInfoEntityJson);
            } else {
                Cookie[] cookies = request.getCookies();
                cookies = cookies == null ? new Cookie[0] : cookies;
                Cookie[] var5 = cookies;
                int var6 = cookies.length;

                for(int var7 = 0; var7 < var6; ++var7) {
                    Cookie cookie = var5[var7];
                    if (Public.SESSION_USER_KEY.equals(cookie.getName())) {
                        return SessionUserInfoEntity.fromCookieJson(cookie.getValue());
                    }
                }

                sessionUserInfoEntity = new SessionUserInfoEntity();
                sessionUserInfoEntity.setUid("");
                sessionUserInfoEntity.setLname("");
                return sessionUserInfoEntity;
            }
        }
    }
}

解决一:在从A请求到B之前将用户id和所有在线用户查出来拼成字符串加到URL后面,在B服务中用request.getParameter()方法获取字符串,能解决问题。但是因为是在token后面加的会影响token值,直接影响了其他服务,也不美观,直接pass

解决二:在从A请求到B之前将需要的值用 request.setAttribute() 方法存一下,后面在B服务中用request.getAttribute()取,解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值