我正在研究wso2管理服务。对于AuthencticationAdmin,我的网址为http://localhost:9763/services/AuthenticationAdmin?wsdl
。
现在,当我点击登录操作时,使用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,然后点击其他一些管理服务操作。
答案 0 :(得分:5)
使用java客户端调试一段时间后(参见我的其他答案),我注意到SOAPUI端点没有使用我在Java客户端中使用的 9443 端口。见下图。
8243 端口是由SOAPUI从WSDL中选取的。
当我将SOAP UI端点端口从 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而另一个没有。
答案 1 :(得分:1)
您可以尝试使用Java客户端访问服务器。有一个例子here。您可以尝试此示例并转储SOAP消息,以查看与您在SOAPUI中看到的内容的区别。
我想知道示例axis client's 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