Java Networking - displaying HTTP Request stream

Hi all,
I am using java.net.HttpURLConnection object to get a response from a http server. I need to see/display the actual HTTP Request stream (containing POST HTTP/1.1 etc.) being sent to the server. How do I do it?
Please help.
Nikhil

Pete_The_Hat,
Thanks a lot for advising the packet sniffer. It works pretty well for HTTP requests. However, for HTTPS requests (SSL), the data in the packets (that I can see through the sniffer) is encrypted. How do I collaborate with the Browser (where the encryption/decryption keys are stored) to see the decrypted/unencrypted code?
It seems too much of work to manually assemble the encrypted data from different packets and then try to decrypt it somehow.
What's the right approach to see/sniff unencrypted HTTPS Streams? It appears to me to be outside the realm of packet sniffers because data in SSL packets is already encrypted before packets are constructed.
Networking Gurus please help.

Similar Messages

  • How to send a http request to a non java appln

    I have one legacy web application running which can handle only http request . So I need to connect (using http request) and send my request and get the response, without opening that application in browser.
    Any idea
    1) How to connect to non - java appln from a java appln ?
    2) How to use the Httprequest without displaying the page using browser?

    You can try one of three routes:
    Open a socket and write the HTTP request and parse the HTTP response yourself
    Use java.net.URLConnection
    Use Jakarta Common's HttpClient at jakarta.apache.org- Saish

  • How to pass a HTTP request from a simple java class

    Is it possible to pass an HTTP request from a simple java class.if yes how?

    Is it possible to pass an HTTP request from a simple
    java class.if yes how?If you're talking about creating a HttpRequest object and passing it to a servlet, that would be a red flag to me that your design is flawed. You shouldn't have to do that - the application server (Tomcat, Weblogic, etc) should be the only thing that has to worry about creating that kind of object and passing it to you.

  • How to send a HTTP request to servlet in java application

    I'm new in Java. I need to send a HTTP request with parameters to servlet in a java aplication. Here is my code. It can be compiled but always threw an exceptions when I ran it. Can anyone help?
    package coreservlets;
    import java.io.*;
    import java.net.*;
    public class PostHTTP
         public static void main(String args[])
              throws IOException, UnknownHostException {
              try
              // URL and servlet
                   URL myURL = new URL("http://pc076/servlet/coreservlets.OffHold");
                   URLConnection c = myURL.openConnection();
                   c.setUseCaches(false);
                   c.setDoOutput(true);
                   ByteArrayOutputStream byteStream = new ByteArrayOutputStream(512);
                   PrintWriter out = new PrintWriter(byteStream, true);
    //parameters
                   String postData = "REASON_CODE=3B&RSPCODE=JSmith&CASENUM=NA795401&REPLY=123&SOURCE=XYZ&REPLYLINK=http://pc076/servlet/coreservlets.ShowParameters";
                   out.print(postData);
                   out.flush();
                   String lengthString = String.valueOf(byteStream.size());
                   c.setRequestProperty("Content-Length", lengthString);
                   c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                   byteStream.writeTo(c.getOutputStream());
                   BufferedReader in =     new BufferedReader(new InputStreamReader
                                                 (c.getInputStream()));
                   String line;
                   //String linefeed = "\n";
                   //resultsArea.setText("");
                   while((line = in.readLine()) != null) {
                        System.out.println(line);
                        //resultsArea.append(linefeed);
              catch(IOException ioe) {
              // Print debug info in Java Console
              System.out.println("IOException: " + ioe);

    here are some updates to your code I haven't tested it running
    post again if you still have trouble
    URL myURL = new URL("http://pc076/servlet/coreservlets.OffHold");
    HttpURLConnection c = (HttpURLConnection)myURL.openConnection();
    c.setDoInput(true);
    c.setDoOutput(true);
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream(512);
    String lengthString = String.valueOf(byteStream.size());
    c.setRequestProperty("Content-Length", lengthString);
    c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    PrintWriter out = new PrintWriter(byteStream, true);
    //parameters
    String postData = "REASON_CODE=3B&RSPCODE=JSmith&CASENUM=NA795401&REPLY=123&SOURCE=XYZ&REPLYLINK=http://pc076/servlet/coreservlets.ShowParameters";
    out.print(postData);
    out.flush();
    byteStream.writeTo(c.getOutputStream());
    // connect
    c.connect();
    BufferedReader in = new BufferedReader(new InputStreamReader
    (c.getInputStream()));
    String line;
    while((line = in.readLine()) != null)
        System.out.println(line);

  • Page display:400 Bad HTTP request after implement WebDispatcher fo portal

    Dear all
       Our portal implement the WebDispatcher(7.0) to load balance for our
    portal system(include one CI and one Dialog instance,we use HTTP to
    load our portal request.).After that,some of the portal page display
    the information like this:
    400 Bad HTTP request
    Bad HTTP request
    Error: -21
    Version: 7000
    Component: HTTP_FILTER
    Date/Time: Thu Sep 27 10:26:51 2007
    Module: http_auth.c
    Line: 469
    Server: portal_WDP_02
    Error Tag:
    Detail: illegal request
    © 2001-2005, SAP AG
    We logon the CI and the page all are right.So,some wrong with our
    WebDispatcher?Can you give us some advice?

    Hi,
    The answer from SAP:
    The maximum size of request URI is hard coded in kernel, and it cannot be configured by a parameter. The maximum size of PATH is 4096, and the maximum size of query string is 4096 as well.
    If the request is a post request, you have to ask the calling side to move some name value pairs from query string to the POST body.
    If it is a GET request, you have to ask the calling side to change it to POST and move value pairs to the POST body.
    Kind Regards

  • Invalid request for HTTP request from Java

    I've written the following code to retrieve data from HTTP url:
    byte [] buffer = new byte[1024];
                   URLConnection conn = src.openConnection();
                   //conn.setRequestProperty("Range", "bytes=" + (start + completed) + "-" + end);
                   //System.out.println("bytes=" + (start + completed) + "-" + end);
                   System.out.println("Response: " + ((HttpURLConnection)conn).getResponseCode());
                   BufferedInputStream bin = new BufferedInputStream(conn.getInputStream());
                   byte [] data = new byte[1024];
                   int readLen;
                   manager.addConnected();
                   while((readLen = bin.read(data)) != -1 && canContinue) {
                        dest.seek(start+completed);
                        dest.write(data, 0, readLen);
                        completed += readLen;
                        System.out.println(readLen + "\t" + completed);
                   dest.close();
                   System.out.println("Read: " + readLen);
              } catch(IOException e) {
                   manager.failConnection();
              }However, the response code printed is -1 and the following content is written to the file (dest is a random access file, you can ignore the seek(), it is needed when I start multi-threading).
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
    <TITLE>ERROR: The requested URL could not be retrieved</TITLE>
    <STYLE type="text/css"><!--BODY{background-color:#ffffff;font-family:verdana,sans-serif}PRE{font-family:sans-serif}--></STYLE>
    </HEAD><BODY>
    <H1>ERROR</H1>
    <H2>The requested URL could not be retrieved</H2>
    <HR noshade size="1px">
    <P>
    While trying to process the request:
    <PRE>
    GET /ubuntu/pool/main/f/firefox/firefox_2.0.0.2+0dfsg-0ubuntu0.6.10_i386.deb HTTP/1.1
    User-Agent: Java/1.6.0
    Host: security.ubuntu.com
    Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
    Connection: keep-alive
    </PRE>
    <P>
    The following error was encountered:
    <UL>
    <LI>
    <STRONG>
    Invalid Request
    </STRONG>
    </UL>
    <P>
    Some aspect of the HTTP Request is invalid.  Possible problems:
    <UL>
    <LI>Missing or unknown request method
    <LI>Missing URL
    <LI>Missing HTTP Identifier (HTTP/1.0)
    <LI>Request is too large
    <LI>Content-Length missing for POST or PUT requests
    <LI>Illegal character in hostname; underscores are not allowed
    </UL>
    <P>Your cache administrator is <A HREF="mailto:root">root</A>.
    <BR clear="all">
    <HR noshade size="1px">
    <ADDRESS>
    Generated Fri, 16 Mar 2007 11:14:48 GMT by inet (squid/2.6.STABLE3)
    </ADDRESS>
    </BODY></HTML>Where does the problem lie? It failed for other URLs too. Can I establish more than one connection by invoking openURLConnection() on the same URL object?

    Ive run into this issue also. I need a way for a portlet to change to its maximized state for the purposes of user registration. Is there anyway this can be done? I know that sun jsp "Providers" which are shown on their example desktop, have some sort of maximized state that they can go into, but im not sure how to use this in a portlet.
    There seems to be very inconsistent support between the proprietary sun provider api, and the portlet api.

  • Java and http request

    when I start a java applet behind a proxy server, a http request can be used by setting proxy variables http.proxyHost and http.proxyPort.
    but is there any way I can get these values from the browser setting(or the internect connection LAN settings on the user's PC)? for the simplest case lets assume we are using internet explorer.
    please let me know on how this can be done?
    thanks!

    To my knowledge, the default situation is that the proxy will be set by the browser.

  • Doubts about HTTPS requests and Java proxy

    Hello,
    I need help about SSL connections and Java.
    I'm developing a HTTP/S proxy with Java. To test my proxy, I use Firefox. I configure the proxy option in the browser. The proxy works good with HTTP requests, but with HTTPS requests doesn't work and I don't know why.
    I explain the steps that I do for a HTTPS request:
    * The browser sends a CONNECT message to the proxy.
    I check that the proxy receives the CONNECT request correctly.
    * The proxy establish a secure connection with the content server.
    I use an SSLSocket to connect with my content server, and the SSL handshake is succesful.
    * The proxy sends a 200 HTTP response to the client:
    I send
    HTTP/1.0 200 Connection established[CRLF]
    [CRLF]
    to the application client (Firefox)
    * The proxy sends/receive data to/from Firefox/content server
    I have a Socket between Firefox and my proxy, and a SSLSocket between my proxy and my content server. I use two threads to communicate the client and the server.
    Java code:
    //Thead server-->proxy-->application(Firefox)
    ThreadComm tpa = new ThreadComm(bis_serverSSL, bos_app);
    //Thread application(Firefox)-->proxy-->server
    ThreadComm tap = new ThreadComm(bis_app, bos_serverSSL);
    The "tpa" thread reads from the SSLSocket between the proxy and the server and sends data to the Socket between the proxy and Firefox.
    The "tap" thread reads from the Socket between the proxy and Firefox and sends data to the SSLSocket between the proxy and the server.
    This is the class ThreadComm:
    public class ThreadComm extends Thread{
        private BufferedInputStream bis = null;
        private BufferedOutputStream bos = null;
        public ThreadComm(BufferedInputStream bis, BufferedOutputStream bos) {
            this.bis = bis;
            this.bos = bos;
        @Override
        public void run() {
            int b = -1;
            FileOutputStream fos = null;
              do {
                   try {
                        b = bis.read();
                        System.out.print((char) b);
                        fos.write(b);
                        bos.write(b);
                        bos.flush();
                   } catch (Exception ex) {
                        Logger.getLogger(ThreadAplicacionProxy.class.getName()).log(Level.SEVERE, null, ex);
                        //b=-1;
              } while (b != -1);
        }But this doesn't work and I don't know why.      
    I have an Apache server with the mod_ssl enabled as content server, I can send requests (with Firefox) to the port 80(HTTP request) and 443(HTTPS request) without use my proxy and it works. If I use my proxy, HTTP request works but with HTTPS request doesn't work, I look the log of Apache and I see:
    [Tue Apr 27 17:32:03 2010] [info] Initial (No.1) HTTPS request received for child 62 (server localhost:443)
    [Tue Apr 27 17:32:03 2010] [error] [client 127.0.0.1] Invalid method in request \x80\x7f\x01\x03\x01
    [Tue Apr 27 17:32:03 2010] [debug] ssl_engine_kernel.c(1770): OpenSSL: Write: SSL negotiation finished successfully
    [Tue Apr 27 17:32:03 2010] [info] [client 127.0.0.1] Connection closed to child 62 with standard shutdown (server localhost:443)
    Why it say? Invalid method in request \x80\x7f\x01\x03\x01 , my proxy sends the data that the Firefox sends.
    I think than I have follow the explanations of [1] but doesn't work, I have problems in implementation in Java but I don't know where.
    I appreciate any suggestions.
    Thanks for your time.
    [1] http://www.web-cache.com/Writings/Internet-Drafts/draft-luotonen-web-proxy-tunneling-01.txt

    ejp, I have checked the socket between the proxy and server and ... You are right! , I was using the port 80 instead of the 443 (incredible mistake!, I'm sorry). I was convinced that I was using the port 443... Well, is a little step, but I still have not won the war :)
    If I see the log files of Apache, We can see that something goes wrong.
    localhost-access.log
    >
    127.0.0.1 - - [04/May/2010:17:44:48 +0200] "\x 80\x 7f\x01\x03\x01" 501 219
    >
    localhost-error.log
    >
    [Tue May 04 17:44:48 2010] [info] Initial (No.1) HTTPS request received for child 63 (server localhost:443)
    [Tue May 04 17:44:48 2010] [error] [client 127.0.0.1] Invalid method in request \x80\x7f\x01\x03\x01
    [Tue May 04 17:44:48 2010] [debug] ssl_engine_kernel.c(1770): OpenSSL: Write: SSL negotiation finished successfully
    [Tue May 04 17:44:48 2010] [info] [client 127.0.0.1] Connection closed to child 63 with standard shutdown (server localhost:443)
    >
    I think that this happens because Apache receives the data without decrypt, this is the reason because in the log we can see the "Invalid method in request \x80\x7f\x01\x03\x01". This supposition is true?
    ejp, you say that the "Termination is quite tricky." I have changed my code following yours suggestions (using the join and the shutdownOutput) but the threads don't die.
    I explain you what I do:
    (in time 1)
    I launch the thread (threadFirefoxToApache) that reads data from Firefox and sends to Apache.
    I launch the thread (threadApacheToFirefox) that reads data from Apache and sends to Firefox.
    (in time 2)
    threadFirefoxToApache sends the firts data to the server.
    threadApacheToFirefox is waiting that the server says something.
    (in time 3)
    threadFirefoxToApache is waiting that Firefox says something.
    threadApacheToFirefox sends data to Firefox.
    (in time 4)
    threadFirefoxToApache is waiting that Firefox says something.
    threadApacheToFirefox is waiting that Firefox says something.
    and they are waiting... and never finish.
    In time 2, these first data are encrypted. The server receives these data and It doesn't understand. In time 3, the server sends a HTTP response "501 Method Not Implemented", here there is a problem because this data must be encrypt. According to the documentation that I read, the proxy cannot "understand" this data but I can "understand" this data. What's happen?
    Firefox encrypt the data and send to the proxy. This It's correct.
    The proxy encrypt the data another time, because I use the SSLSocket to send the data to the server. Then the server receives the data encrypted two times, when decrypt the data gets the data encrypted one time. And this is the reason why the server doesn't understand the data that sends Firefox. It's correct? May be.
    Then If I want that the server receives the data encrypted one time I need to use the socketToServer, It's correct?
    I will supposed that yes. If I use the socketToServer, the proxy doesn't understand nothing, because the data received from the socketToServer are encrypted (I only see simbols), but the Apache log says that there is a problem with the version? (If I use the socketToServer the threads die)
    >
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_kernel.c(1760): OpenSSL: Loop: SSLv3 read finished A
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_kernel.c(1760): OpenSSL: Loop: SSLv3 write change cipher spec A
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_kernel.c(1760): OpenSSL: Loop: SSLv3 write finished A
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_kernel.c(1760): OpenSSL: Loop: SSLv3 flush data
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_kernel.c(1756): OpenSSL: Handshake: done
    [Tue May 04 19:55:42 2010] [info] Connection: Client IP: 127.0.0.1, Protocol: TLSv1, Cipher: RC4-MD5 (128/128 bits)
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_io.c(1817): OpenSSL: read 5/5 bytes from BIO#29bd910 [mem: 29ea0a8] (BIO dump follows)
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_io.c(1750): -------------------------------------------------------------------------
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_io.c(1789): | 0000: 80 7f 01 03 .... |
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_io.c(1793): | 0005 - <SPACES/NULS>
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_io.c(1795): ------------------------------------------------------------------------
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_kernel.c(1770): OpenSSL: Write: SSL negotiation finished successfully
    [Tue May 04 19:55:42 2010] [info] [client 127.0.0.1] SSL library error 1 reading data
    [Tue May 04 19:55:42 2010] [info] SSL Library Error: 336130315 error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    [Tue May 04 19:55:42 2010] [debug] ssl_engine_kernel.c(1770): OpenSSL: Write: SSL negotiation finished successfully
    [Tue May 04 19:55:42 2010] [info] [client 127.0.0.1] Connection closed to child 63 with standard shutdown (server localhost:443)
    >
    What option is the correct? I need use the SSLSocketToServer or socketToServer to send/read the data to/from the server?. Use the SSLSocket has sense because the data travel in a secure socket, but use the Socket also has sense because the data are encrypted and they are protected by this encription. It's complicated...

  • Https request in my JAVA application ?

    In order to retrieve the real time flow from my broker in my JAVA application I need to do a https request.
    When using a web browser a window to enter username and password shows up as a result of a request to : https://clients.dubus.fr/clients/nego/crtsdm.exe?code=tnu&origine=FR
    What I would like is to code/simulate this behavior in my JAVA application.
    I thought that JSSE but I can not even find JAVA examples when 'username' and 'password is used'.
    As you see, I am a little bit lost
    Thanks in advance for your help.

    That type of authentication has nothing to do with the HTTPS stuff. It's a standard client-server authentication. The initial request will get a response from the server which includes headers which tell the client it needs to give login information. The browser prompts the user, and uses that in another request to the same source with the user ID info included in the request headers.
    Check out this page for some details:
    http://www.javaworld.com/javaworld/javatips/jw-javatip47.html

  • How to post multiple http requests using a single http connection in java

    I am using the httpurlconnection class and it allows only to post one request on a connection. I require to post multiple http requests by opening a single connection. Code examples please. Thanx in advance.

    Hi
    I found this article through Google. I hope it helps a little
    http://www.developer.com/tech/article.php/761521
    D

  • Java service invocation with HTTP Request

    A simple HTTP Request containing the SOAP envelope is a valid way of calling a web service, right?
    It seems simpler and more efficient than the "traditional" ways (Axis, JAX-RPC, etc), so what are the disadvantages?
    Thanks in advance
    Pedro

    kept the jars under APP-INF/lib

  • Http adapter -reading a http file stream

    Hi folks,
    Here is a requirement
    I need to read a file sent as an http object stream through XI and then updated the same in a database table in R/3?
    <b>How can i configure the http adapter so that it reads the file stream</b>
    regards
    krishna
    Message was edited by:
            Krishnamoorthy Ramakrishnan

    Thanks bhavesh
    Though your reply and reference did not directly answer my question, which i will explain below concisely, it did help me to get an idea about how to handle my requirement.
    Please read and give me your valuable advise.
    The sender is a distributor that wants to send some text file to a file server in XI.The sender will have to send the file as a http stream link. XI has to read the  file from the http stream and push it to a  file server in XI.  for this, i have identified that
    1. At outbound/sender side, there is an HTTP adapter in XI.
    2.The request to XI should be of the some think like
    <b>http://<host>:<port>/file stream.....</b>
    3. At inbound side , I have a java server proxy as suggested in the blog.
    4. The server proxy will use a http client connection to read the file stream and another ftp client to push it to the file server
    Do you think this would realize the requirement?
    I have also got a question here
    With the above mentioned URL, will the sender be able to communicate with XI, since the client is outside the network and has access to internet only. How can it communicate with XI?
    Also, Is there an better alternative to this approach?
    Thanks for your help
    Kind Regards
    krishna

  • Single-Sign-On (SSO) configuration on JAVA Stack through HTTP Header method

    Hello SDN community,
    in the context of a Proof of Concept, we are testing the integration of Microsoft Sharepoint Portal with SAP Backend (addin) systems.
    As the architecture impose use an external scenario (access from the internet), we couldn't use the Kerberos (SPNego) solution and thus we chosed the http header solution which in short uses an intermediary web server (in this case the IIS of the MOSS solution) which will act as authority.
    I miss information on how the workflow works for this http header authentication method. Through the visual administrator of the addin JAVA stack, it is possible to configure each application with a customized authentication (a choice of security modules). But this all that I know.
    My task is to configure SSO. From a sharepoint portal, the user should be able to access Web Dynpros and BSPs. I imagine that the very first call to a webdynpro or bsp (or maybe when we log on the sharepoint portal), the request to the WDP or BSP will first be forwareded by the intermediary server to the JAVA stack (or is it the SAP dispatcher that has to be configured).
    Is there an application to be built on the java stack to deal with the authentication, modify http header?
    What will the Java stack return? a sap long ticket? a token?
    How will the redirect work (to by example a BSP which is in the ABAP stack)?
    SAP preconise to secure with SSL the link between the intermediary web server and the JAVA stack, is IP restriction also a solution?
    A lot of questions about how this SSO http header should work,
    I would be very greatful for any help, or info,
    Kind regards,
    Tanguy Mezzano

    Hi Tanguy,
    to tell you the truth I'm really unsure about what you are trying to achieve. When I started posting to your thread I thought all you wanted was trying to access your J2EE engine via Browser and authenticate against the engine using HTTP Header Variables. Nevermind:
    Here are some answers to your question:
    in fact I did succeed, the problem was that even after domain-relaxation done by the J2EE, I had to change the domain of th SAP cookie to the bbbb.domain.com to be understood (I would have thought that all hosts in/under domain .domain would have accepted such a cookie but it seems that no...).
    The server does not care about the domain because Cookies in an HTTP Request do not contain any domain information. The domain is just important when the Cookie is set by the server so your Client (Browser) will know in which cases the Cookie may be sent or not. So if your domain is xxx.yyy.domain.com and your cookie is issued to .domain.com then your Browser will definitely sent it to all hosts under .domain.com (This includes xxx.yyy.domain.com etc.)
    My current scenario is: in a first request get a SAP Logon Ticket from the Java Stack, then change its domain and then directly call the backend with it.
    You can do that but there is no Client involved in this scenario. So this is useful if you just want to test the functionality (e.g. authentication to J2EE using Header Variables (This works finally!!!) and then use the fetched Logon Ticket to test SSO against any trusted Backend!!)
    So everything's is in a Java Client application without using any redirection.
    If I understand you, you're solution is from the Browser call a servlet (which is deployed on the Java Stack and has no authentication schema) by passing to it our http header.
    No, you should initially authenticate somewhere! I thought that maybe you had some resource you access before accessing the Java Stack. This could be any application (e.g. deployed on a Tomcat or JBOSS or other server or if you like even SAP J2EE). After authenticating there you are aware of the username and could use it to  procceed (e.g. Authenticate against the J2EE using the same user and HTTP Header authentication for that particular user!)
    That servlet will transfer the http header (with the HttpClient app) in order to get from the Java Stack a SAP Logon ticket, and then to redirect to the resource and by sending back the cookie in client browser. Am I correct?
    This was just a suggestion because I realized that there was no Client ever involved in any of your testing (looked strange to me!). I was just thinking that it would be easier for you to just get the Cookie into your Browser so your Browser would do the rest for you (in your case finally send the Logon Ticket Cookie to your Backend to test SSO using Logon Tickets!).
    The AuthenticatorServlet somehow serves as a Proxy to your client because your client is not able to set the Header Variable. That's why I initially suggested to use a Proxy (e.g. Apache) for that purpose. The problem is just that if you use a Proxy you will have to tell it somehow which username it should set in the Header Variable (e.g. using a URL Parameter or using a personalized client certificate and fetch the username (e.g. cn=<username> from the certificate!)
    This way of doing would simplify the calls for sso for each new application needing authentication, instead of having all code each time in it...
    I'm stuck again! Do you want to authenticate an End User or do you want to authenticate an application that needs to call any resources in your Backend that requires authentication?
    So my problem now, is how to call the servlet from the client browser:
    I'm trying to call my servlet from the browser but I don't succeed. I am able to understand how to reach a jsp from the Java Stack, but not to reach a servlet. I don't find the path to my servlet:
    <FORM method="POST" action="SSORedirect2" >
    A JSP is a servlet too. There is just no JAVA Class involved!
    You do not need any POST Request to invoke a Servlet.
    I see that my servlet is deployed, but I don't how what path to give to my form to invoke the servlet, here follows my web.xml
      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE web-app (View Source for full doctype...)>
    - <web-app>
      <display-name>WEB APP</display-name>
      <description>WEB APP description</description>
    - <servlet>
      <servlet-name>SSOredirect2</servlet-name>
      <servlet-class>com.atosorigin.examples.AuthenticatorServlet</servlet-class>
      </servlet>
    - <servlet>
      <servlet-name>SSORedirect2.jsp</servlet-name>
      <jsp-file>/SSORedirect2.jsp</jsp-file>
      </servlet>
    - <security-constraint>
      <display-name>SecurityConstraint</display-name>
    - <web-resource-collection>
      <web-resource-name>WebResource</web-resource-name>
      <url-pattern>/*</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
      </web-resource-collection>
    - <auth-constraint>
      <role-name>DefaultSecurityRole</role-name>
      </auth-constraint>
      </security-constraint>
    - <security-role>
      <role-name>DefaultSecurityRole</role-name>
      </security-role>
      </web-app>
    If you have an AuthenticatorServlet Class all you need is to add the Servlet Mapping in your web.xml file
    e.g.
    <servlet>
      <description>
      </description>
      <display-name>AuthenticatorServlet</display-name>
      <servlet-name>AuthenticatorServlet</servlet-name>
      <servlet-class>com.atosorigin.examples.AuthenticatorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>AuthenticatorServlet</servlet-name>
      <url-pattern>/AuthenticatorServlet</url-pattern>
    </servlet-mapping>
    You can directly call the Servlet in your Browser by calling the URL provided in the url-pattern of your Servlet mapping ( in this case /AuthenticatorServlet). The engine will invoke the Class "com.atosorigin.examples.AuthenticatorServlet" in the background and do whatever you defined there!
    I have also to pass my http header and the redirectUrl in the GET request.
    If you like! I just suggested this for testing purposes. As I stated before you need a way to tell your proxy (or in your case AuthenticatorServlet) which user should be set when calling the Engine in order to authenticate using HTTP Header. You could use the URL Paramater to define the user you actually want to use when you set the Header Variable.
    I just introduced the redirectURL because you were talking about redirects all the time. So if you finally want to call the Backend you could define the Backend URL in the redirectURL Parameter and the Servlet will make sure that you are redirected to this location after the whole process!
    Thx for your input very helpful,
    But again 0 points
    Cheers

  • No "Remote-User" in HTTP header when HTTP request gets to WLS

    Hello Exprers,
    I have a customer, using 10.3.3 on Linux machine. Web server as Apache.
    He wants Remote-User in HTTP header, he used to get it when he used Tomcat. But when he transffered to Apache and 10.3.3, he is not getting the Remote-User in header, instead he is getting proxy-remote-user.
    He wants the Remote-user in HTTP header.
    Any clue, on why he is not getting it.

    Hi,
    We are facing error while doing openConnection
    When I tried with simple java file it worked as shown below
    import java.io.*;
    import javax.net.ssl.HttpsURLConnection;
    public class test
    public static void main(String[] args) throws Exception
    String httpsURL = "https://rcfe.aspac.citicorp.com:40054/servlet/Verify";
    URL myurl = new URL(httpsURL);
    HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
    InputStream ins = con.getInputStream();
    InputStreamReader isr = new InputStreamReader(ins);
    BufferedReader in = new BufferedReader(isr);
    if (con!=null)
    System.out.println("con="+con);
    System.out.println(ins);
    Output*
    [rcrrgbg2@kauh0079:/rcrmap2/weblogic/bea/ORA_PFRD/forms/j2ee] java test
    con=com.ibm.net.ssl.www2.protocol.https.e:https://rcfe.aspac.citicorp.com:40054/servlet/Verify
    sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@5f6c5f6c
    However when I tried with below program I am able to write upto Web CL URL but after that no log is written when it tries to do openConnection() for this line csConn=(HttpsURLConnection)new URL(webclURL).openConnection(); in the below code
    Some part of the code:_
    =======================================================================
    import java.io.*;
    import javax.servlet.http.*;
    import javax.servlet.*;
    import java.util.Hashtable;
    import java.io.File;
    import java.io.FileInputStream;
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.net.ssl.HttpsURLConnection;
    import java.net.URL;
    public class CRMSLogin extends HttpServlet
    private static final long serialVersionUID=-6294676216324813290L;
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
    String iniFile=request.getParameter("CRMS_INI_FILE_PATH");
    String sessionId=request.getParameter("SessionId");
    String applId=request.getParameter("apl_id");
    String userId=request.getParameter("userId");
    String clientIp=request.getRemoteAddr();
    Properties iniProp=this.getProperties(iniFile);
    String crmsAppServerContext=iniProp.getProperty("CRMS_APP_SERVER_CONTEXT");
    String appModule=iniProp.getProperty("CRMS_MODULE");
    String webclURL=iniProp.getProperty("WEBCL_URL");
    // HttpsURLConnection csConn=null;
    String crmsFormsTerm=null;
    crmsFormsTerm=getEntitlements(iniFile.trim(),sessionId,applId.trim(),clientIp.trim(),webclURL.trim());
    String baseContent=this.getBaseContent(iniProp);
    ServletOutputStream out=response.getOutputStream();
    baseContent=baseContent.replaceAll("<!APP_TITLE!>","Credit Risk Management System");
    baseContent=baseContent.replaceAll("<!APP_CONTEXT!>",crmsAppServerContext);
    baseContent=baseContent.replaceAll("<!APP_MODULE!>",appModule);
    baseContent=baseContent.replaceAll("<!APP_TRACE!>",crmsFormsTerm.replaceAll(" ", ""));
    baseContent=baseContent.replaceAll("<!USER_ID!>",userId);
    baseContent=baseContent.replaceAll("<!SESSION_ID!>",sessionId);
    baseContent=baseContent.replaceAll("<!APPL_ID!>",applId.trim());
    baseContent=baseContent.replaceAll("<!CLIENT_IP!>",clientIp.trim());
    baseContent=baseContent.replaceAll("<!INI_FILE!>",iniFile.trim());
    out.println(baseContent);
    out.flush();
    out.close();
    private synchronized Properties getProperties(String inifile)
    Properties iniProp=new Properties();
    FileInputStream iniFileStream=null;
    try
    iniFileStream=new FileInputStream(inifile);
    iniProp.load(iniFileStream);
    iniFileStream.close();
    catch(Exception e)
    finally
    try
    if(iniFileStream!=null)
    iniFileStream.close();
    catch(Exception e)
    return iniProp;
    public static synchronized String getEntitlements(String inifile,String sessionId,String applId,String clientIp,String webclURL)
         HttpsURLConnection csConn=null;
         OutputStreamWriter requestStream=null;
         BufferedReader responseStream=null;
         StringBuffer responseData=new StringBuffer();
         String csReturnString=null;
         //String webclURL=null;
         BufferedWriter traceLog=null;
         int csCount=6;
         Properties iniProp=new Properties();
         String traceFile=null;
         String entitlementData=null;
         try
         readIniProperties(inifile,iniProp);
         traceFile=getTraceFile(iniProp);
         traceLog=new BufferedWriter(new FileWriter(traceFile,true));
         if(traceFile!=null)
         traceLog.write("###########################");
         traceLog.write("P A R A M E T E R S");
         traceLog.write("###########################");
         traceLog.newLine();
         traceLog.write("INI_FILE:"+inifile);
         traceLog.newLine();
         traceLog.write("SESSION_ID:"+sessionId);
         traceLog.newLine();
         traceLog.write("APPL_ID:"+applId);
         traceLog.newLine();
         traceLog.write("CLIENT_IP:"+clientIp);
         traceLog.newLine();
         traceLog.write("count:"+csCount);
         traceLog.newLine();
         traceLog.write("###########################");
         traceLog.newLine();
         //webclURL=getWebclURL(traceLog,iniProp);
         if(webclURL!=null)
         traceLog.write("Web CL URL:"+webclURL);
              traceLog.newLine();
         csConn=(HttpsURLConnection)new URL(webclURL).openConnection();     
    traceLog.write("Open Connection - Completed!");
         traceLog.newLine();
         csConn.setRequestMethod("POST");
         csConn.setDoInput(true);
         csConn.setDoOutput(true);
         requestStream=new OutputStreamWriter(csConn.getOutputStream());
         traceLog.write("Open Request Stream - Completed!");
         traceLog.newLine();
         requestStream.write("SessionId="+sessionId+"&ClientIP="+clientIp+"&apl_id="+applId+"&count="+csCount);
         requestStream.flush();
         requestStream.close();
         traceLog.write("Write Params to Request Stream - Completed!");
         traceLog.newLine();
         responseStream=new BufferedReader(new InputStreamReader(csConn.getInputStream()));
         traceLog.write("Open Response Stream - Completed!");
         traceLog.newLine();
         while((csReturnString=responseStream.readLine())!=null)
         responseData.append(csReturnString);
         traceLog.write("Response Stream Reading - Completed!");
         traceLog.newLine();
         responseStream.close();
         csConn.disconnect();
         entitlementData=getEntitlementData(traceLog,responseData.toString(),iniProp);
         traceLog.write("responseData::"+responseData);
         traceLog.newLine();
         traceLog.newLine();
         traceLog.write("entitlementData::"+entitlementData);
         traceLog.newLine();
         traceLog.flush();
         traceLog.close();
         catch(Exception e)
         e.printStackTrace();
         finally
         try
         if(requestStream!=null)
         requestStream.close();
    =======================================================================
    output_
    ###########################P A R A M E T E R S###########################
    INI_FILE:/rcrmap1/rcrrgbg2/crms.ini
    SESSION_ID:%2526%253ASIGNED_TICKET%253D%2526PROVIDER_TICKET%253D002c6e4cH0tZy2Gj4JBCOiSL7uSlKisfsqgwP9KoRRn7e%252BY%253D%253AKRSERVER0006%252BA9A52AAE%252B4D1DC7AA%252B14400
    APPL_ID:RCRMKR
    CLIENT_IP:169.165.42.174
    count:6
    Web CL URL:https://rcfe.aspac.citicorp.com:40054/servlet/Verify
    Please help to guide us.
    Regards,
    Harish

  • Firefox aborts its http request silently within 60 seconds

    duplicate of [/questions/1047223]
    *Summary
    Firefox aborts its http request within almost 60 seconds(period till
    timeout varies) and tells nothing to users. This happened with both of
    Nginx and Apache.
    *Environment
    Client browser: Firefox 35.0.1
    Client OS: Windows 7 Enterprise 32bit SP1
    Web Server: Apache 2.2.3-91 & Nginx 1.6.2-1
    Server OS: CentOS 5.11
    PHP: 5.3.3
    FastCGI: spawn-fcgi-1.6.3-1
    *Description of the issue
    I have noticed that nginx logs http response code 499 so often.
    We use nginx almost only for two web applications, the one based on PHP
    and others on ruby. We experiences this problem in both apps. The server and client PC belong to the same subnet.
    Since last month, nginx logged 624 errors for Firefox and 16 for other
    browsers(almost IE).
    So for test, I wrote the simple PHP (see the bottom of this article) and tried to access it
    through both of Apache & Nginx with Firefox 35.0.1 and IE 11. IE11
    waited 120 seconds and returned html successfully through both of nginx
    and Apache, but Firefox failed either.
    Let me describe Firefox's behaviour.
    1. Enter the test php url at location bar and press enter.
    2. The message 'waiting server response' appears at status bar for a while.
    3. Watching network conversation through Wireshark, 'Keep Alive' signals
    are repeated some times between server and client, and after that,
    4. The message dissappears. 'FIN' signal is sent to the server from the client just after that. Firebug logs 'Aborted' at the almost the same time.
    5. The server responses 'FIN ACK.'
    There is a bit difference with nginx and Apache in behaviour after 'FIN
    ACK'.
    A.Nginx
    Nginx logs '499' error and finish conversation immediately.
    B.Apache doesn't log anthying at this step. After 120 seconds(sleep timer
    in PHP) from request it returns expected html. Of course Firefox don't render it but I could confirm both of request and response from Wireshark's 'Follow TCP Stream' function. Finally it is logged with http status code 200 at httpd log file.
    I repeated this test several times. Actual timeout period varies from 22
    to 70 seconds but results are same.
    With my understanding, the browser is expected to show 'time out error'
    after such situation but it doesn't show anything. So end user can't
    know what happend.
    *What I tried to solve the problem
    *disabled all extentions other than firebug.
    *set 'network.tcp.keepalive.enabled' to false at about:config.
    *set 'network.http.spdy.enabled' to false, too.
    *set 'network.http.response.timeout' to 0.
    *disabled IPV6 and DNS prefetch seeing the following help.
    https://support.mozilla.org/en-US/kb/websites-dont-load-troubleshoot-and-fix-errors
    *changed Timeout to 0 at apche's http.conf.
    My purpose is make our web apps to work properly in our working environment. I've recommended Firefox to our collegues because it was very cool application. Changing the default brawser is nightmare to me. Any suggestions are welcome.
    <test php>
    <?php sleep(120); ?>
    <?php echo time(); ?>

    duplicate of [/questions/1047223]
    *Summary
    Firefox aborts its http request within almost 60 seconds(period till
    timeout varies) and tells nothing to users. This happened with both of
    Nginx and Apache.
    *Environment
    Client browser: Firefox 35.0.1
    Client OS: Windows 7 Enterprise 32bit SP1
    Web Server: Apache 2.2.3-91 & Nginx 1.6.2-1
    Server OS: CentOS 5.11
    PHP: 5.3.3
    FastCGI: spawn-fcgi-1.6.3-1
    *Description of the issue
    I have noticed that nginx logs http response code 499 so often.
    We use nginx almost only for two web applications, the one based on PHP
    and others on ruby. We experiences this problem in both apps. The server and client PC belong to the same subnet.
    Since last month, nginx logged 624 errors for Firefox and 16 for other
    browsers(almost IE).
    So for test, I wrote the simple PHP (see the bottom of this article) and tried to access it
    through both of Apache & Nginx with Firefox 35.0.1 and IE 11. IE11
    waited 120 seconds and returned html successfully through both of nginx
    and Apache, but Firefox failed either.
    Let me describe Firefox's behaviour.
    1. Enter the test php url at location bar and press enter.
    2. The message 'waiting server response' appears at status bar for a while.
    3. Watching network conversation through Wireshark, 'Keep Alive' signals
    are repeated some times between server and client, and after that,
    4. The message dissappears. 'FIN' signal is sent to the server from the client just after that. Firebug logs 'Aborted' at the almost the same time.
    5. The server responses 'FIN ACK.'
    There is a bit difference with nginx and Apache in behaviour after 'FIN
    ACK'.
    A.Nginx
    Nginx logs '499' error and finish conversation immediately.
    B.Apache doesn't log anthying at this step. After 120 seconds(sleep timer
    in PHP) from request it returns expected html. Of course Firefox don't render it but I could confirm both of request and response from Wireshark's 'Follow TCP Stream' function. Finally it is logged with http status code 200 at httpd log file.
    I repeated this test several times. Actual timeout period varies from 22
    to 70 seconds but results are same.
    With my understanding, the browser is expected to show 'time out error'
    after such situation but it doesn't show anything. So end user can't
    know what happend.
    *What I tried to solve the problem
    *disabled all extentions other than firebug.
    *set 'network.tcp.keepalive.enabled' to false at about:config.
    *set 'network.http.spdy.enabled' to false, too.
    *set 'network.http.response.timeout' to 0.
    *disabled IPV6 and DNS prefetch seeing the following help.
    https://support.mozilla.org/en-US/kb/websites-dont-load-troubleshoot-and-fix-errors
    *changed Timeout to 0 at apche's http.conf.
    My purpose is make our web apps to work properly in our working environment. I've recommended Firefox to our collegues because it was very cool application. Changing the default brawser is nightmare to me. Any suggestions are welcome.
    <test php>
    <?php sleep(120); ?>
    <?php echo time(); ?>

Maybe you are looking for

  • Some images won't load in Safari, iTunes, iBooks and App Store

    Since my upgrade to Mavericks, some images on Safari, iTunes, iBooks and App Store wont load some times. I can't figure out the source of problem, but I've tested all four apps and the same problem exists across all of them; I've also tested Chrome,

  • Virtscrl.exe memory leak

    I've noticed strange behaviors from virtscrl.exe: after a few hours of using my W530, the process has over 1 million handles (shown in task manager) and my memory's Paged Pool shoots up to 4 - 5 GB (usually smaller than 1 GB). Any idea why? I'm using

  • Right tab doesn't align properly when using leading decimals (for TOC)

    I have a problem. I'm using the latest version of Pages. When I create a table of contents and use the right tab with leading decimals, they don't align straight on the right side. No matter what I do, they are always off a bit. I also have MS Word,

  • How to view source of java libraries?

    Hello, I need to view how some things in Java are implemented, like how Objects are added to HashMap etc. I know this can be done with IDEs like JBuilder and Netbeans, but is there another way? All the classes are in rt.jar as far as I know, but view

  • PSFT Listener in OIM

    Hi I followed the steps in connector guide to deploy the PSFT listener in OIM server. I didn't see an option on how to deploy the listener in Weblogic. By default it is deployed in OIM Server. We have a requirement to deploy PeopleSoft Listener in We