私は以下をアーカイブしようとしています:
1)エンドユーザーはサーブレットに投稿します(GWと呼びます)-GWは、次のリクエストに備えてセッションを保存します。
2)GWが受信するすべてのリクエストに対して、GWは別のサーブレットに投稿します(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がこれまでのところ良好な新しいセッションを作成することです。2番目のコマンドでは、次のコード行でセッションの検証に失敗します。
isSessionValid = req.isRequestedSessionIdValid();
isSessionValidFromURL = req.isRequestedSessionIdFromURL();
isSessionValidFromCookie = req.isRequestedSessionIdFromCookie();
すべてfalseを返します。上記のようにCookieメカニズムを使用してセッションIDを送信しようとしましたが、受信したセッションIDをURLから送信しようとしましたが成功しませんでした。
さらに、私はこれとこれを試しましたが成功しませんでした。ありがとう
編集:解決策:この素晴らしい投稿はURLを介して渡されます(SSLであるため、セキュリティ違反にはなりません)