Web Service - Windows域验证问题。问题描述:整个的流程是这样的:客户端浏览器 ---> Web 应用程序 --> Web Service服务器端(或叫:发布端)是用My Eclipse9建立的Web Service,使用的是JAX-WS,会生成一个Web Service的代理类,如下:LoginDelegate.java文件:
--------------------------------------------------
package com.framework.permission.service;

@javax.jws.WebService(targetNamespace = "http://service.permission.framework.com/", serviceName = "LoginService", portName = "LoginPort", wsdlLocation = "WEB-INF/wsdl/LoginService.wsdl")
public class LoginDelegate { com.framework.permission.service.Login login = new com.framework.permission.service.Login(); public String login(String username, String password, String appKey) {
return login.login(username, password, appKey);
}}
--------------------------------------------------此代理类调用的是:Login.java类:package com.framework.permission.service;

public class Login extends HibernateGenericDao {
public String login(String username,String password,String appKey){ // 下面是域验证的方法,就是window ldap域验证
WindowsDomainAuthenticationUtil domainAuth = new WindowsDomainAuthenticationUtil();
String loginResult = domainAuth.authenticate(username, password);

return loginResult; } public static void main(String[] args) {
new Login().login("zhangsan", "987654321", "testAuthority");
}}
客户端Web程序程序是这样调用Web Service的:
--------------------------------------------------
package bifc.client.login;public class ILogin implements Login { public boolean login(String uid, String pwd) {
LoginService service = new LoginService();
LoginDelegate delegate = service.getLoginPort();
String serverXML = delegate.login("zhangsan", "987654321", "3");
}

}
--------------------------------------------------刚启动Tomcat后,局域网内其他用户用IE浏览器都能够验证成功,但过一些时间,突然其他用户就会开始验证失败,然后以后都是验证失败。但是,此时用此类中的main方法或重新启动tomcat再让局域网内的别人验证,都会验证成功,但过一些时间,出现同样故障:局域网内的其他用户又验证失败。问题1:请教师兄们,这是什么原因?如何能够做到:局域网内的其他用户一直都能验证成功??急求解决方案,谢谢师兄们,不胜感激!!
问题2:多位用户用自己的IE浏览器调用执行这段代码: LoginService service = new LoginService();
LoginDelegate delegate = service.getLoginPort();
String serverXML = delegate.login("zhangsan", "987654321", "3");时,访问的是Web Service服务器端同一个LoginDelegate.java类的login()方法?还是多个LoginDelegate.java类的login()方法?我的一点感觉,不知自己分析的对不对:是不是线程的问题?但是应该不是,远程调用服务器端的login()方法时,在Web Service服务器端(或叫发布端)内部都会创建一个新的WindowsDomainAuthenticationUtil对象,并且再调用此类中的方法:authenticate(),难道多个人在调用执行这段代码: LoginService service = new LoginService();
LoginDelegate delegate = service.getLoginPort();
String serverXML = delegate.login("zhangsan", "987654321", "3");调用远程的Web Service时,调用的都是Web服务器端同一个实例的login方法?这样就导致多个人调用的是同一个WindowsDomainAuthenticationUtil对象的login()方法,是因为这样才导致的问题吗?难道真是线程问题?一位用户域验证没有验证完呢,而这时另一位用户使用IE浏览器又使用同一位用户进行验证,就出现问题了,是这样吗?使用Web Service服务器端的那个类中的main方法进行域验证,永远、一直都是成功的,说明域验证方法没有问题,那就是Web Service的问题,而用断点跟踪,多位用户用IE浏览器进行访问服务器端的Web Service,都能够正确进入到开放的login()方法,说明Web Service开放的接口(login方法)是没有问题的,问题就出在login()方法内部的这段代码上: // 下面是域验证的方法,就是window ldap域验证
WindowsDomainAuthenticationUtil domainAuth = new WindowsDomainAuthenticationUtil();
String loginResult = domainAuth.authenticate(username, password);
用断点跟踪,是在domainAuth.authenticate(username, password);这个方法内部出现的域验证失败,看来可能真的是线程同步问题。