2017-05-02 27 views
1

Webアプリケーションに接続する必要があります。要求されたURLがアプリケーション内でマッピングされていない場合は、HTTPリダイレクトを実行します。 (例:/ users - >/users /)認証のために、私たちはトークンベースのアプローチを使用しているので、それぞれのリクエストでトークンを送信する必要があります。HttpURLConnection:リダイレクト後に既に接続されています

リダイレクト後にトークンを設定すると、いつもjava.lang.IllegalStateException: Already connectedが表示されます。誰かがこの問題で私を助けることができますか?ここで

は私がやったことです:

try { 
     // setup connection 
     URL url = new URL(ENDPOINT + path); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod(method.toString().toUpperCase()); 
     connection.setInstanceFollowRedirects(false); 

     // has the request been redirected? 
     if (connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_PERM) { 
     String newUrl = connection.getHeaderField("Location"); 
     connection = (HttpURLConnection) new URL(ENDPOINT + newUrl).openConnection(); 
     } 

     if (useToken) { 
     connection.addRequestProperty("Authorization", testToken); 
     } 

     // post data 
     if (data != null) { 
     connection.setDoOutput(true); 
     connection.addRequestProperty("Content-Type", "application/json"); 
     String json = new Gson().toJson(data); 
     try (OutputStream dataStream = connection.getOutputStream()) { 
      dataStream.write(json.getBytes()); 
     } 
     } 


     // retrieve response 
     String body = IOUtils.toString(connection.getInputStream()); 
     return new TestResponse(connection.getResponseCode(), body); 
    } catch (IOException ex) { 
     LOGGER.error(ex.getMessage()); 
     return null; 
    } 

答えて

1

私はあなたが接続はHTTPが、私はあなたのコード理由から見ることができません

// has the request been redirected? 
     if (connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_PERM) { 
     String newUrl = connection.getHeaderField("Location"); 
     connection = (HttpURLConnection) new URL(ENDPOINT + newUrl).openConnection(); 

を削除するリダイレクトに従うようになりますconnection.setInstanceFollowRedirects(true)を設定されるべきだと思いますsetInstanceFollowRedirectsを偽に設定する必要がありました

+0

私はそれを試みましたが、トークンを含むAuthorizationヘッダーが設定されていません。 – Tunguska

+0

私は、どの時点で例外がスローされるのか分かりますか? – Ryan

+0

"Authorization"ヘッダを設定したとき – Tunguska

関連する問題