Клиент HttpURLConnection и API отличаются заголовком от одного клиента - PullRequest
0 голосов
/ 15 ноября 2018

С точки зрения безопасности я пытаюсь расширить связь между моим клиентом и моим API с помощью сеанса.Клиент отправляет свой заголовок в API, и API создает сеанс.

Клиент:

public static JSONObject send(String info)
{ 
  StringBuffer resp = new StringBuffer();

  try
  {
    URL url = new URL( "http://localhost:8080/myapi/" );
    HttpURLConnection con = ( HttpURLConnection ) url.openConnection() );

    con.setRequestMethod("POST");
    con.setRequestProperty( "USER-AGENT", USER_AGENT );
    con.setRequestProperty( "Accept-Charset", "UTF-8");
    con.setRequestProperty( "Content-Type", "application/json" );
    con.setDoOutput( true );

    String data = info ;

    DataOutputStream output = new DataOutputStream( con.getOutputStream);

    output.writeBytes( data );
    output.flush();
    output.close();


    int returnCode = con.getResponseCode();
    BufferedReader reader = null;
    if (returnCode==200)
    {
      reader = new BufferedReader( new InputStreamReader(con.getInputStream()));
    }
    else
    {
      reader = new BufferedReader( new InputStreamReader(con.getErrorStream()));
    }

    String input;
    while( ( input = reader.readLine() ) != null )
    {
      resp.append( input );
    }
    reader.close();

    return new JSONObject( resp.toString() );
  }
  catch( Exception e )
  {
    System.out.println( e.getMessage() );

    return new JSONObject( resp.toString() );
  }
  finally
  {
    if( con != null )
    {
      con.disconnect();
    }  
  }
}

API:

HttpServletRequest request = requestGlobals.getHttpServletRequest();
HttpSession session = request.getSession();

Идея: первый запрос с send создает соединение с API, а API генерирует сеанс, который хранится в нем.Второй send от того же клиента должен отправить тот же заголовок, чтобы API мог сгенерировать тот же сеанс и сравнить его с сохраненным.Например, я могу гарантировать дальнейшие вызовы только после успешного входа в систему

Проблема: если соединение восстанавливается на втором send, тот же клиент отправляет другой заголовок с другой длиной содержимого, в результате чегогенерируется другой сеанс.Я попытался установить if( con == null ) вокруг области, где соединение создается на клиенте, но это не решило мою проблему.

Вопрос: Что мне нужно сделать, чтобы второй send использовал уже существующее соединение или отправил тот же заголовок?

...