[jcifs] Redirecting through IIS to Tomcat gives an error

Tony Cooke TCooke at elders.com.au
Fri Jul 25 10:24:10 EST 2003


Hi all.
 
Currently our intranet is run on a Win2K box with IIS and ASP but for future developments and security we wish to use Java and specifically jCIFS for NTLM HTTP authentication (one of the requirements is authorisation without having to log on again. jCIFS is perfect for that). 
 
Gradually we will move just about everything to Java but there will be a requirement to still use IIS and ASP for some 3rd party applications we have purchased where there is no Java equivalent.
 
My problem is this. I currently have the Tomcat ISAPI redirector DLL sending all requests specific to Java to Tomcat. This is fine. When I access the NtlmHttpAuthExample via Tomcat (default port 8080, not via IIS) I get authenticated. If I go through the redirector DLL I get the following exception. (sorry about the length of this message :-)
 
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at jcifs.smb.SmbComSessionSetupAndX.writeBytesWireFormat(SmbComSessionSetupAndX.java:124)
at jcifs.smb.AndXServerMessageBlock.writeAndXWireFormat(AndXServerMessageBlock.java:109)
at jcifs.smb.AndXServerMessageBlock.writeWireFormat(AndXServerMessageBlock.java:72)
at jcifs.smb.SmbTransport.send(SmbTransport.java:455)
at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:127)
at jcifs.smb.SmbSession.send(SmbSession.java:102)
at jcifs.smb.SmbTree.treeConnect(SmbTree.java:124)
at jcifs.smb.SmbSession.logon(SmbSession.java:56)
at jcifs.http.NtlmHttpFilter.doFilter(NtlmHttpFilter.java:120)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:261)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:360)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:604)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:562)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:679)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)

I have the following in my web.xml file:
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
 <display-name>Test</display-name>
 <description>Testing Environment</description>
 
 <filter>
  <filter-name>NTLM HTTP Authentication Filter</filter-name>
  <filter-class>jcifs.http.NtlmHttpFilter</filter-class>
  
  <!-- For development, any SMB server is suitable for validating password hashes. 
  <init-param>
   <param-name>jcifs.http.domainController</param-name>
   <param-value>PDC</param-value>
  </init-param>
  -->
  <!-- For production use a real domain controller and eliminate a middle-man server -->
  <init-param>
   <param-name>jcifs.smb.client.domain</param-name>
   <param-value>PDC</param-value>
  </init-param>
  <init-param>
   <param-name>jcifs.netbios.wins</param-name>
   <param-value>PDC</param-value>
  </init-param>
  
 </filter>
 
 <!-- NTLM HTTP Authentication only works with MSIE -->
 <filter-mapping>
  <filter-name>NTLM HTTP Authentication Filter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 
 <servlet-mapping>
  <servlet-name>invoker</servlet-name>
  <url-pattern>/servlet/*</url-pattern>
 </servlet-mapping>
 
</web-app>

Basically I'm not sure where to go from here. Any help would be greatly appreciated.
 
I'd also like to say thanks to Michael and whomever else helped for creating this. It seems to be a godsend for those of us stuck in a Microsoft world wanting to use Java.
 
All the best,
Tony
-------------- next part --------------
HTML attachment scrubbed and removed


More information about the jcifs mailing list