JBoss 7.1 を使用しており、Web アプリケーションを基本認証で保護していますが、基本認証ヘッダーを必要とするのは最初の呼び出しのみで、後続の呼び出しでは認証に jsessionid を使用する必要があります。これを達成する方法は?
これまでのところ、request.getSession() の呼び出しでセッションの作成を強制するレスト サーブレットを作成しました。
@Path("/rest/HelloWorld")
public class HelloWorld {
@GET()
@Produces("text/plain")
public String sayHello(@Context HttpServletResponse response,
@Context HttpServletRequest request) {
HttpSession session = request.getSession();
return "Hello World! " + request.getUserPrincipal().getName();
}
私の考えでは、他の呼び出しは jsessionid Cookie のみを必要とするべきでしたが、フィドラーを見ると、最初の呼び出しが期待どおりに動作していることがわかります。最初に 401 が返され、クライアントは基本認証ヘッダーを含めて再送信し、jsessionid が返されます。2 番目の呼び出しでは jsessionid Cookie が含まれていますが、クライアントが基本認証ヘッダーを再送信するようにトリガーする 401 が引き続き表示されます。
これは、認証に成功した最初の呼び出しから返されたヘッダーです。
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Pragma: No-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 01:00:00 CET
Set-Cookie: JSESSIONID=AFDFl2etiUNkn-mpM+DXr3KE; Path=/Test
Content-Type: text/plain
Content-Length: 18
Date: Tue, 29 Jan 2013 09:12:48 GMT
Hello World! test1
2回目の呼び出しを行うと、jsessionidが含まれます
GET /Test/index.html HTTP/1.1
Host: cwl-rickard:8080
Cookie: JSESSIONID=AFDFl2etiUNkn-mpM+DXr3KE
そして、基本認証ヘッダーを含むリクエストを再送信するようにクライアントに強制する401を取得しています。
HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Pragma: No-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 01:00:00 CET
WWW-Authenticate: Basic realm="ApplicationRealm"
Content-Type: text/html;charset=utf-8
Content-Length: 958
Date: Tue, 29 Jan 2013 09:12:48 GMT
私が見逃しているアイデア。