最近在工作中需要用JAVA与Action Dictionray的单点登陆,碰到了一些问题,总结如下:
常规的操作就不说了,参考http://blog.youkuaiyun.com/freellf/article/details/6385154
问题一:出现异常信息如下:
jcifs.smb.SmbException: The parameter is incorrect.
at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563)
at jcifs.smb.SmbTransport.send(SmbTransport.java:663)
at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:316)
at jcifs.smb.SmbSession.send(SmbSession.java:218)
at jcifs.smb.SmbTree.treeConnect(SmbTree.java:176)
at jcifs.smb.SmbSession.logon(SmbSession.java:147)
at jcifs.smb.SmbSession.logon(SmbSession.java:140)
at jcifs.http.NtlmHttpFilter.negotiate(NtlmHttpFilter.java:189)
at jcifs.http.NtlmHttpFilter.doFilter(NtlmHttpFilter.java:121)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
原因分析:因JCIFS的HttpFilter并不支持NTLM2协议,而当客户端是WIN7系统时,默认采用的是NTLM2协议。如果此时域控服务器也支持NTLM2,则会默认采用NTLM2协议验证。就会出现该异常了。
解决办法1:将客户端的默认协议改为NTLM协议,创建一个reg文件给客户,内容如下:
REGEDIT4
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa]
"LMCompatibilityLevel"=dword:00000001
参考:http://blog.youkuaiyun.com/jjgjlf/article/details/6622928
解决办法2:采用收费版:Jespa http://www.ioplex.com/
解决办法3:自己实现NTLM2协议部分,工作量比较大啊
因客户数量较少,暂时还是采用的解决办法1