本地在两个端口启动两个服务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()取,解决问题。