HttpURLConnection client and API different Header from same client










2















In terms of security I try to extend the communication between my client and my API with a session. The client sends its header to the API and the API generates a session.



Client:



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();


Idea: The first request with send creates the connection with the API and the API generates the session which is stored inside it. The second send from the same client should send the same header, so the API can generate the same session and compared it to the saved one. For example, I am able to guarantee further calls only after a successful login



Problem: If the connection is reestablished on the second send, the same client sends a different header with a different content length, resulting in a different session being generated. I tried to set a if( con == null ) around the area where the connection is build at the client but that didn't solve my problem.



Question: What do i have to do so that the second send uses the already existing connection or send the same header?










share|improve this question


























    2















    In terms of security I try to extend the communication between my client and my API with a session. The client sends its header to the API and the API generates a session.



    Client:



    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();


    Idea: The first request with send creates the connection with the API and the API generates the session which is stored inside it. The second send from the same client should send the same header, so the API can generate the same session and compared it to the saved one. For example, I am able to guarantee further calls only after a successful login



    Problem: If the connection is reestablished on the second send, the same client sends a different header with a different content length, resulting in a different session being generated. I tried to set a if( con == null ) around the area where the connection is build at the client but that didn't solve my problem.



    Question: What do i have to do so that the second send uses the already existing connection or send the same header?










    share|improve this question
























      2












      2








      2








      In terms of security I try to extend the communication between my client and my API with a session. The client sends its header to the API and the API generates a session.



      Client:



      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();


      Idea: The first request with send creates the connection with the API and the API generates the session which is stored inside it. The second send from the same client should send the same header, so the API can generate the same session and compared it to the saved one. For example, I am able to guarantee further calls only after a successful login



      Problem: If the connection is reestablished on the second send, the same client sends a different header with a different content length, resulting in a different session being generated. I tried to set a if( con == null ) around the area where the connection is build at the client but that didn't solve my problem.



      Question: What do i have to do so that the second send uses the already existing connection or send the same header?










      share|improve this question














      In terms of security I try to extend the communication between my client and my API with a session. The client sends its header to the API and the API generates a session.



      Client:



      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();


      Idea: The first request with send creates the connection with the API and the API generates the session which is stored inside it. The second send from the same client should send the same header, so the API can generate the same session and compared it to the saved one. For example, I am able to guarantee further calls only after a successful login



      Problem: If the connection is reestablished on the second send, the same client sends a different header with a different content length, resulting in a different session being generated. I tried to set a if( con == null ) around the area where the connection is build at the client but that didn't solve my problem.



      Question: What do i have to do so that the second send uses the already existing connection or send the same header?







      java session servlets httpurlconnection






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 15 '18 at 12:59









      Stormed17Stormed17

      114




      114






















          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53320038%2fhttpurlconnection-client-and-api-different-header-from-same-client%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53320038%2fhttpurlconnection-client-and-api-different-header-from-same-client%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          這個網誌中的熱門文章

          What does pagestruct do in Eviews?

          Dutch intervention in Lombok and Karangasem

          Channel Islands