[jcifs] Null Pointer Exception on using NTLM Authenticaion wi th jcifs 0.7 .0 b3 w/Tomcat 4.1.12

anshuman_aggarwal at non.agilent.com anshuman_aggarwal at non.agilent.com
Sat Sep 28 07:06:04 EST 2002


My original problem remains the same!!! since the cookies are enabled is there anything else esp. from the PDC side that needs to be done for NTLM authentication

Thanks in advance,

> -----Original Message-----
> From: Michael B. Allen [mailto:miallen at eskimo.com]
> Sent: Friday, September 27, 2002 12:47 PM
> To: Glass, Eric
> Cc: jcifs at lists.samba.org
> Subject: Re: [jcifs] Null Pointer Exception on using NTLM 
> Authenticaion
> wi th jcifs 0.7 .0 b3 w/Tomcat 4.1.12
> 
> 
> On Fri, 27 Sep 2002 07:27:22 -0400
> "Glass, Eric" <eric.glass at capitalone.com> wrote:
> 
> > > Err, so if cookies are disabled you can't store objects in the
> > > HttpSession? That doesn't seem right.
> > > 
> > The servlet spec discusses 3 methods of maintaining the session:
> > 
> > 1. The JSESSIONID Cookie (the most common, and the only 
> method a servlet
> > container is required to support)
> > 
> > 2. SSL sessions (SSL provides a mechanism for tracking 
> client requests, so
> > the spec suggests that this would be an easy way to support 
> sessions over
> > HTTPS).
> > 
> > 3. URL rewriting, supported by HttpServletRequest.encodeURL and
> > .encodeRedirectURL.  This is not strictly required by the 
> spec, but is
> > fairly universally supported by real-world containers.  
> This involves
> > rewriting a URL such as "http:/somehost/example.jsp" as a 
> path parameter
> > named "jsessionid" like 
> "http://somehost/example.jsp;jsessionid=1234".
> > 
> > According to the Javadoc for HttpServletRequest.encodeURL,
> > 
> > "For robust session tracking, all URLs emitted by a servlet 
> should be run
> > through this method. Otherwise, URL rewriting cannot be 
> used with browsers
> > which do not support cookies."
> > 
> > However, there isn't any real way to do this in the NTLM 
> filter, since there
> > isn't anything to rewrite.  What happens is:
> > 
> > 1.  Client connects and requests the resource.
> > 
> > 2.  The servlet container creates a new HttpSession object 
> on demand and
> > stores the NtlmHttpSession object in it.  The filter sends 
> the 401 response
> > with the type 1 message, and the servlet container adds the 
> JSESSIONID
> > set-cookie response header.
> > 
> > 2.  Client replies with the type 2 response, but has 
> declined the cookie, so
> > doesn't send the cookie request header.
> > 
> > 3.  The servlet container determines that this is a new 
> session (since it
> > received neither a cookie or a rewritten request) and 
> creates a new session
> > when the NtlmHttpFilter calls request.getSession().
> > 
> > 4.  When the filter attempts to retrieve the 
> NtlmHttpSession object from the
> > HttpSession, it gets a null and throws a 
> NullPointerException on line 162.
> > 
> > 
> > I can't think of any easy way to finagle the filter to support URL
> > rewriting; I suppose you could do something like:
> 
> Well,  maybe I don't need to. What is the preferred way to 
> uniqely identify
> a  session? I could just keep a static Hashtable of 
> NtlmHttpSession objects
> keyed by something unique about the session? 
> 
> > 1.  When the initial request comes in, access the session and check
> > session.isNew().  If the session is not new, proceed normally.
> 
> This could definately be usefull.
> 
> > 2.  If the session is new, we can't determine reliably 
> whether the client
> > supports cookies (since we haven't sent them one yet); 
> redirect the client
> > to an encoded URL:
> > 
> > 	String encoded =
> > response.encodeRedirectURL(request.getRequestURL().toString());
> > 	response.sendRedirect(encoded);
> 
> Funny  you should mention this because I think I will need to 
> do a redirect
> for  something  a  little  unrelated.  When  a  user wants to 
> access an SMB
> resource  (e.g. a file somewhere) using the credentials 
> negotiated via NTLM
> I  have  to  get hashes for *both* the server authenticating 
> the client and
> the  server  hosting  the requested resource. If they are 
> separate requests
> this  doesn't  occur  but  if  they are authenticating and 
> accessing an SMB
> resource  in  the  same  request  I need to do two NTLM HTTP 
> Authentication
> negotiations.  I  was  thinking  a redirect might do the 
> trick? If I send a
> redirect will that close the session first? Can I reliably 
> request that the
> client  re-access  the same resource so I can do the 
> negotiation twice with
> two different challenges? 
> 
> > 3.  When the client reconnects, the session should be 
> established.  Since
> > they are accessing the resource via the encoded URL, the 
> subsequent type 1
> > and type 3 requests should contain the encoded session ID as well.
> 
> So this is the uniqe bit of information I need.
> 
> -- 
> A  program should be written to model the concepts of the task it
> performs rather than the physical world or a process because this
> maximizes  the  potential  for it to be applied to tasks that are
> conceptually  similar and more importantly to tasks that have not
> yet been conceived. 
> 



More information about the jcifs mailing list