如何从客户端发送用于Web服务身份验证的用户名密码

时间:2014-07-17 05:56:07

标签: java web-services axis

我搜索了这个论坛并搜索了网,但我无法找到解决问题的方法。

我获得了一个WSDL文件,使用它在axis1.4的帮助下生成存根。我还创建了与服务所需的XML响应完全相同的XML响应,但是当我尝试访问该服务时,它表示"授权失败"。

然后我才知道网页服务受用户名密码保护。

我应该如何在XML请求中发送用户名密码。

下面是我的代码如何生成请求。

public class SearcUserFriendlyIsMain {

/**
 * @param args
 */
Tews6SoapBindingStub stub = null;
public void init(){
    if(null == stub) {
        try {

            URL url = null;
            String endPoint = "http://localhost:1111";

            try {
                url = new URL(endPoint);
            } catch (MalformedURLException e) {                 
                e.printStackTrace();
            }

            stub = new Tews6SoapBindingStub(url, null);
            stub.setMaintainSession(true);

        } catch (AxisFault e) {



            StringBuffer sb = new StringBuffer();
            for (StackTraceElement t : e.getStackTrace()) {
                sb.append("\n").append(t.toString());
            }
            System.out.println("DEBUG"+ sb.toString());

        }
    }
}
public static void main(String[] args) {
    SearcUserFriendlyIsMain tds = new SearcUserFriendlyIsMain();
    tds.init();
    NYCBSearchUserByFriendlyIdQuery query = new NYCBSearchUserByFriendlyIdQuery();
    NYCBSearchUserByFriendlyIdSearch search = new NYCBSearchUserByFriendlyIdSearch();
    NYCBSearchUserByFriendlyIdQueryResult res = null;
    NYCBSearchUserByFriendlyIdSearchFilter filter = new NYCBSearchUserByFriendlyIdSearchFilter();
    NYCBSearchUserByFriendlyIdSearchFilter[] filters = {filter};
    filter.setOp(OperatorType.EQUALS);
    filter.setIndex(new  BigInteger("1"));
    filter.setField("USERID");
    filter.setValue("junaidaj01");
    search.setFilter(filters);
    NYCBSearchUserByFriendlyIdQueryTaskContext context = new NYCBSearchUserByFriendlyIdQueryTaskContext();
    context.setAdmin_id("uid=00000001-0001-0001-0001-0000000ja202,ou=serviceaccounts,dc=test,dc=com");
    query.setNYCBSearchUserByFriendlyIdSearch(search);
    try {
        res = tds.stub.NYCBSearchUserByFriendlyIdQuery(context,query);
        System.out.println(res.getImsStatus());
    } catch (ImsException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (RemoteException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

1 个答案:

答案 0 :(得分:0)

使用基本HTTP身份验证 如果您的Web服务要求您使用HTTP基本身份验证,则可以调整Axis客户端代码,如下所示:

// to use Basic HTTP Authentication:
((Stub) service)._setProperty(Call.USERNAME_PROPERTY, "user name");
((Stub) service)._setProperty(Call.PASSWORD_PROPERTY, "password");

添加SOAP标头元素 有时,Web服务还需要您包含SOAP Header信息,通常用于登录目的。对于显式头(在WSDL中定义),SOAP Header信息应该可以直接从Axis客户端代码写入。但是,如果标头是隐式的(未在WSDL中定义),则必须手动生成它们。

// add a <UserName> node to the SOAP Header
((Stub) service).setHeader("urn:thisNamespace", "UserName", "Kuntal Ganguly");

如果这可以解决您的问题,请告诉我?