2012-11-07 125 views
2

我正在嘗試向HTTP 303(重定向)響應中添加一些自定義頭參數。但是,新的標題似乎被從響應中刪除。未將JAX-RS自定義頭添加到重定向響應

此代碼是爲了接收請求,並返回一個HTTP響應303:

@POST 
@Path("/authorize") 
@Produces("application/x-www-form-urlencoded") 
public Response getOAuthGrant(@HeaderParam(OAuth2.AUTHORIZATION) @DefaultValue("") String authorization, 
           @HeaderParam(OAuth2.CLIENT_ID)  @DefaultValue("") String clientId, 
           @HeaderParam(OAuth2.CLIENT_SECRET) @DefaultValue("") String clientSecret, 
           @HeaderParam(OAuth2.GRANT_TYPE)  @DefaultValue("") String grantType) throws InternalServerException, UnauthorizedException { 

     OAuth2.validateGrantRequest(clientId, clientSecret, authorization, grantType); 

     ApiTokenV2 apiTokenV2 = new ApiTokenV2(); 

     try { 
      apiTokenV2 = TokenManager.getApiToken(clientId); 

      if (apiTokenV2 != null) { 
       apiTokenV2.generateAccessGrant(clientId); 
      } else { 
       logger.error("Error in TokenEndpoint. Retrieved token is null."); 
       throw new InternalServerException("A server error occurred while trying to authorize the requester. Could not find 'generateAccessGrant' method"); 
      } 
     } catch (NamingException e) { 
      throw new InternalServerException("A server error occurred while trying to authorize grant request. Could not find 'generateAccessGrant' method.", e); 
     } 

     return Response.status(Response.Status.SEE_OTHER) 
         .type(MediaType.APPLICATION_FORM_URLENCODED_TYPE) 
         .header("Location", "/api/token") 
         .header("Authorization", "OAuth") 
         .header("Access-Grant", apiTokenV2.getAccessGrant()) 
         .build(); 
} 

什麼我錯在這裏做什麼?我應該用@Context來代替嗎?

+0

您使用一個'@ Produces'註釋。你的方法產生什麼響應實體? – 2012-11-07 08:12:44

回答

7

你正在做的事情應該工作。

@POST 
@Path("/authorize") 
public Response authorize() { 
    return Response.status(Response.Status.SEE_OTHER) 
      .header(HttpHeaders.LOCATION, "/api/token") 
      .header("X-Foo", "bar") 
      .build(); 
} 

curl執行它:

% curl -v -X POST http://localhost:8080/WebApplication1/rest/console/authorize 
* About to connect() to localhost port 8080 (#0) 
* Trying ::1... connected 
> POST /WebApplication1/rest/console/authorize HTTP/1.1 
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 
> Host: localhost:8080 
> Accept: */* 
> 
< HTTP/1.1 303 See Other 
< X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.2.2 Java/Oracle Corporation/1.7) 
< Server: GlassFish Server Open Source Edition 3.1.2.2 
< Location: /api/token 
< X-Foo: bar 
< Content-Length: 0 
< Date: Wed, 07 Nov 2012 08:20:24 GMT 
< 
* Connection #0 to host localhost left intact 
* Closing connection #0 

正如你所看到的,響應代碼爲

303 See Other 

和interesing標頭設置:

Location: /api/token 
X-Foo: bar 
+4

+1,儘管我會推薦使用'HttpHeaders.LOCATION'常量。 – yegor256

+0

@ yegor256謝謝,編輯。 – 2012-11-07 12:48:54

相關問題