2

我正在使用 JBoss 7.1 并已使用基本身份验证保护我的 Web 应用程序,但我只希望第一次调用需要基本身份验证标头,后续调用应使用 jsessionid 进行身份验证。如何做到这一点?

到目前为止,我已经创建了一个 rest servlet,通过调用 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。在第二次调用中包含 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

当我打第二个电话时, 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

任何我想念的想法。

4

0 回答 0