2

我正在开发 wso2 管理服务。我得到http://localhost:9763/services/AuthenticationAdmin?wsdlAuthenticationAdmin 的 url。

现在,当我使用 admin,admin,127.0.0.1 进行登录操作时,我得到了 true 作为返回。

ESB 控制台显示已登录。

现在,当我点击注销操作时,我没有得到任何响应。

我还注意到响应的标头不包含任何会话 ID。

我的 ESB 是 4.6.0。

登录请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:aut="http://authentication.services.core.carbon.wso2.org">
   <soapenv:Header/>
   <soapenv:Body>
      <aut:login>
         <!--Optional:-->
         <aut:username>admin</aut:username>
         <!--Optional:-->
         <aut:password>admin</aut:password>
         <!--Optional:-->
         <aut:remoteAddress>127.0.0.1</aut:remoteAddress>
      </aut:login>
   </soapenv:Body>
</soapenv:Envelope>

登录响应:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <ns:loginResponse xmlns:ns="http://authentication.services.core.carbon.wso2.org">
         <ns:return>true</ns:return>
      </ns:loginResponse>
   </soapenv:Body>
</soapenv:Envelope>

在响应中,当我点击登录时,我看到,在底部我只在标题中得到 6 个元素,如下所示:

> Date Tue, 25 Jun 2013 14:31:42 GMT
> Transfer-Encoding chunked
> #status# HTTP/1.1 200 OK
> Content-Type text/xml; charset=UTF-8
> Connection Keep-Alive
> Server WSO2-PassThrough-HTTP

现在,我没有得到会话 ID。你能指出我哪里错了吗?

我的场景是我想登录 WSO2,然后点击其他一些管理服务操作。

4

2 回答 2

5

在使用 java 客户端调试一段时间后(请参阅我的其他答案),我注意到 SOAPUI 端点没有使用我在 Java 客户端中使用的9443端口。见下图。

在此处输入图像描述

SOAPUI 从 WSDL 中提取了8243端口。

当我将 SOAP UI Endpoint 端口从8243更改为9443时,JSESSIONID 会在响应中返回,如下所示:

HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=573D42750DE6C0A287E1582239EB5847; Path=/; Secure; HttpOnly
Content-Type: text/xml;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 26 Jun 2013 22:14:20 GMT
Server: WSO2 Carbon Server

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:loginResponse xmlns:ns="http://authentication.services.core.carbon.wso2.org"><ns:return>true</ns:return></ns:loginResponse></soapenv:Body></soapenv:Envelope>

我不知道端口 8243 和 9443 之间有什么区别,或者为什么一个返回 JSESSIONID 而另一个不返回。

于 2013-06-26T22:18:09.743 回答
1

您可以尝试使用 java 客户端访问服务器。这里有一个例子。您可以尝试此示例并转储 SOAP 消息,以查看与您在 SOAPUI 中看到的内容的区别。

我想知道示例轴客户端 setManageSession(true)是否在会话中产生了一些魔力:

public static void main(String[] args) throws 
            RemoteException, AuthenticationAdminAuthenticationExceptionException {

    System.setProperty("javax.net.ssl.trustStore", 
                        SampleConstants.CLIENT_TRUST_STORE_PATH);
    System.setProperty("javax.net.ssl.trustStorePassword", 
                        SampleConstants.KEY_STORE_PASSWORD);
    System.setProperty("javax.net.ssl.trustStoreType", 
                        SampleConstants.KEY_STORE_TYPE);

    AuthenticationAdminStub stub = 
          new AuthenticationAdminStub(
                 "https://localhost:9443/services/AuthenticationAdmin");
    ServiceClient client = stub._getServiceClient();
    Options options = client.getOptions();
    options.setManageSession(true);

    Login login = new Login();
    login.setUsername("admin");
    login.setPassword("admin");
    stub.login(login);

    ServiceContext serviceContext = stub.
            _getServiceClient().getLastOperationContext().getServiceContext();
    String sessionCookie = (String) serviceContext
                               .getProperty(HTTPConstants.COOKIE_STRING);

    System.out.println(sessionCookie);      
}

上面的代码打印出类似于以下的内容:

JSESSIONID=844ECBED015805A24FF9DBD5F5A56C8D; Path=/; Secure=null; HttpOnly=null

于 2013-06-26T10:40:43.940 回答