Spring (MVC、セキュリティ、トランザクションなど) で構築された Java アプリ (jetty サーバー) があり、Web サービスに REST を使用しています。Apache HTTPClient (HttpComponents) を使用してサーバーへの REST 呼び出しを行う別の Java クライアントがあります。サーバー アプリはフォーム ベースの認証を使用し、Web クライアントは j_spring_security_check フォームを使用してアプリにログインします。したがって、Java クライアントから [https://host:port/myapp/j_spring_security_check?j_username=myuser&j_password=mypass] を使用し、POST を使用してログインを行います。認証は正常に機能しています (UserDetailService の子クラスに到達し、認証が正常に行われます) が、後続の REST 呼び出しは失敗し、ユーザーが認証されなかったかのように示されます (呼び出しは、指定された残りの呼び出しのコントローラー メソッドに到達しません)。アプリの html ページの 1 つが返されます (これは jsp ページの 1 つです)。
私はすべてのリクエスト(ログインを含む)に対してCookieを出力しており、リクエストごとに異なるjsessionidを出力しています(リクエストはサーバーへの残りの呼び出しです)。リクエストごとに 1 つの Cookie を次に示します。最初のリクエストはログイン リクエストです (リクエストごとに jsessionid が異なることに注意してください)。
cookies: [[version: 0][name: JSESSIONID][value: 1x5i3b0lbf5o7xv52kjh0vu89][domain: 127.0.0.1][path: /webui][expiry: null]]
cookies: [[version: 0][name: JSESSIONID][value: t05vbrffqv6t1xcygps9l6jaz][domain: 127.0.0.1][path: /webui][expiry: null]]
cookies: [[version: 0][name: JSESSIONID][value: 8v5i5ofbgr201kh2txxale674][domain: 127.0.0.1][path: /webui][expiry: null]]
リクエストごとに異なる jsessionid が問題/原因ですか? この問題を回避するにはどうすればよいですか? HttpClient を使用したコードは次のとおりです。
request = new HttpPost(url);
httpClient = new DefaultHttpClient();
httpClient.getConnectionManager().getSchemeRegistry().register(new Scheme("https", 443, socketFactory));
HttpResponse response = httpClient.execute(request);
System.out.println("cookies: " + httpClient.getCookieStore().getCookies());
HttpEntity resp_ent = response.getEntity();
this.status_code = response.getStatusLine().getStatusCode();
Cookie を保存するために何か特別なことをする必要がありますか? どんな助けでも大歓迎です。