我正在使用java spring webservice将soap请求发送到服务器。但是我收到来自服务器的错误
The security context token is expired or is not valid
然后我将身份验证添加到SOAP头,导致请求xml像这样:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<UsernameToken>
<Username>XXXXXXXX</Username>
<Password>XXXXXXXX</Password>
</UsernameToken>
</Security>
</env:Header>
<env:Body>
The body is in the correct format here
</env:Body>
</env:Envelope>
但我仍然得到那个错误。根据我的理解,客户端将身份验证凭据发送到服务器,服务器发送回requestToken,用于保持客户端和服务器之间的连接,然后客户端使用从服务器收到的令牌可以进行任何其他API调用,如登录,买,卖(或API中提到的任何东西)
我在这个假设中是对的吗?如果是,那么如何使用Java Spring WebServices实现这一点。我是否需要在客户端生成字段,如BinarySecret,并在RequestSecurityContext下打包?
为了添加SOAP头,我编写了一个实现WebServiceMessageCallback的类,并覆盖了doWithMessage方法,并在其中为用户名和密码(即安全性)写入标题
任何帮助将不胜感激!谢谢!
答案 0 :(得分:0)
因此,经过2天的发现,我能够找到解决方案!
1)使用CXF wsdl2java
从wsdl生成类2)确保在pom文件中指向正确的wsdlLocation
3)从生成的服务类中获取存根并注入提供的用户名和密码,然后它应该工作。像这样:
TEST VECTOR :
[ 1 2 ]
ELEM :
1
BASE VECTOR :
[ 2 ]
ROOT CASE , RET PERM :
[
[ 2 ]
]
PROCESS PERMS :
[
[ 2 ]
]
V_i :
[ 2 ]
k : 0
ORG PERM :
[ 2 ]
PUSH PERM :
[ 1 2 ]
RET PERMS :
[
[ 1 2 ]
]
CLEANED PERM :
[ 2 ]
k : 1
ORG PERM :
[ 2 ]
PUSH PERM :
[ 2 1 ]
RET PERMS :
[
[ ]
[ 2 1 ]
]
CLEANED PERM :
[ 2 ]
double free or corruption (out)
PS:请确保您拥有正确的库,我只是使用了cxf-bundle而没有使用cxf,而且它有效!之前它不起作用,因为我单独包含来自cxf的库。