More information:

The code I'm using to get the response code always comes back with http
status 200. The very next line:

    ObjectInputStream result = new ObjectInputStream (in);

Is the one that generates the exception of EOF on stream.

Makes perfect sense... I just wish I had a reliable way of detecting at
the applet level when the session has expired...

On the server side I get an exception as it is attempting to send the
client the login form, but of course the applet is trying to send an
object and the server chokes:

-----------

Feb 16, 2006 8:35:47 AM org.apache.catalina.connector.CoyoteAdapter
service
SEVERE: An exception or error occurred in the container during the
request processing
java.lang.NullPointerException
        at
org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:324)
        at
org.apache.catalina.authenticator.FormAuthenticator.saveRequest(FormAuth
enticator.java:487)
        at
org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAut
henticator.java:236)
        at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticator
Base.java:490)
        at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541
)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:126)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:105)
        at
org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:
419)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:107)
        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:1
48)

--------

Any ideas are greatly appreciated.

Thanks.

-Dennis

-----Original Message-----
From: Klotz Jr, Dennis [mailto:[EMAIL PROTECTED] 
Sent: Thursday, February 16, 2006 8:29 AM
To: Tomcat Users List
Subject: Best practice for detecting session expiration for applets?

This might be off topic but I am hoping someone has the time to help me
out.

I recently moved from basic to forms based authentication and I am
having some problems with session expiration and my applets.

I serialize plain old java objects back and forth from my client applet
to tomcat 5.5.15 and now I am trying to recognize at the client when a
session has expired, instead of simply getting a nasty exception about
EOF on stream etc.

I'm hoping someone can give me a couple of pointers on what I should do
to handle this from an applet.

Should I do a 'normal' GET or POST heartbeat before the serialization
attempt? (really don't like this idea)?

Should I try and use HttpURLConnections getResponseCode()? (it doesn't
seem to work as I would expect).

Should I use the jakarata commons http client project?  (Seems like
overkill)

Here is an example of the code followed by the exception I get on the
client side:

--------------------------

    HttpURLConnection con = (HttpURLConnection)servlet.openConnection
();
    Object o = null;
        
    // Prepare for both input and output
    con.setDoInput (true);
    con.setDoOutput (true);
        
    // Turn off caching
    con.setUseCaches (false);
        
    // Set the content type to be application/x-java-serialized-object
    con.setRequestProperty ("Content-Type",
"application/x-java-serialized-object");
        
    // Send headers
    sendHeaders (con);
        
    // Write the serialized object as post data
    ObjectOutputStream out = new ObjectOutputStream (con.getOutputStream
());
    out.writeObject (obj);
    out.flush ();
    out.close ();
        
    InputStream in = con.getInputStream ();

    int status = con.getResponseCode ();
    System.out.println (this.getClass ().getName () + " : INFO : " +
status);
    if ((status == con.HTTP_UNAUTHORIZED) ||
        (status == con.HTTP_NOT_AUTHORITATIVE) ||
        (status == con.HTTP_FORBIDDEN))
    {
        System.out.println (this.getClass ().getName () + " : WARNING :
Session timed out !!?? " );
        // TODO: do something useful here. Send custom exception up...
    }

    ObjectInputStream result = new ObjectInputStream (in);
    try
    {
        o = result.readObject ();
    }
    catch 
    ... (snip) ...
    finally 
    {
        in.close();
        result.close();
    }
      
    return (o);

-------------------------

java.io.EOFException
        at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown
Source)
        at
java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
        at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
        at java.io.ObjectInputStream.<init>(Unknown Source)
        at
com.empirix.hm.callq.client.common.HttpMessage.sendPostMessage(HttpMessa
ge.java:212)
        at
com.empirix.hm.callq.client.common.CallQSerializeData.sendViaHttp(CallQS
erializeData.java:102)

----------------------

Regards,

Dennis Klotz



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to