最近在工作中需要用JAVA与Action Dictionray的单点登陆,碰到了一些问题,总结如下:
常规的操作就不说了,参考http://blog.csdn.net/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)
解决办法1:将客户端的默认协议改为NTLM协议,创建一个reg文件给客户,内容如下:
- REGEDIT4
- [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa]
- "LMCompatibilityLevel"=dword:00000001
参考:http://blog.csdn.net/jjgjlf/article/details/6622928
解决办法2:采用收费版:Jespa http://www.ioplex.com/
解决办法3:自己实现NTLM2协议部分,工作量比较大啊
因客户数量较少,暂时还是采用的解决办法1