我正在尝试归档以下内容:
1) 最终用户将发布到一个 servlet(我们称之为 GW)——GW 将存储他的会话以供以下请求到来。
2)对于GW收到的每个请求,GW将发布到另一个servlet(将其称为API)
3)只有GW可以发布到API(SSL安全),并且两者都有一个固定的IP(虽然它与这个问题无关)
4) 对于发布到 API 的每个请求,API 还必须为将来的请求维护一个会话。
5) GW 正在使用以下实现发布到 API:
try {
HttpPost httppost = new HttpPost(uri);
CookieStore cookieStore = new BasicCookieStore();
HttpContext httpContext = new BasicHttpContext();
httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpResponse response = httpclient.execute(httppost, httpContext);
} finally {
httpclient.getConnectionManager().shutdown();
}
6) API 会收到如下请求:
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession(false);
// isSessionValidFromURL = req.isRequestedSessionIdFromURL();
// isSessionValidFromCookie = req.isRequestedSessionIdFromCookie();
isSessionValid = req.isRequestedSessionIdValid();
if (isSessionValid) {
...
...
}
...
}
7) 在 API 中,如果请求是新请求,它将创建一个新会话,将参数存储在 DB 中并构建全局变量等等。
问题是:在发送登录(GW向API发送登录)命令后,API创建新会话到目前为止一切顺利。在第二个命令中,它无法通过以下代码行验证会话:
isSessionValid = req.isRequestedSessionIdValid();
isSessionValidFromURL = req.isRequestedSessionIdFromURL();
isSessionValidFromCookie = req.isRequestedSessionIdFromCookie();
全部返回假。我尝试使用如上所示的 cookie 机制发送会话 id,并尝试从 url发送接收到的会话 id,但没有成功。
编辑:解决方案:这个精彩的帖子通过 url 传递它(它的 SSL,所以它不会是安全漏洞)