gpt4 book ai didi

java - Apache CXF Java 客户端的安全策略

转载 作者:太空宇宙 更新时间:2023-11-04 12:58:35 25 4
gpt4 key购买 nike

我的任务是为现有 Soap Web 服务创建 Java 客户端,其安全策略定义如下:

<wsp:Policy wsu:Id="security_policy_id">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic256/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Lax/>
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp/>
</wsp:Policy>
</sp:TransportBinding>
<sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken10/>
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SignedSupportingTokens>
<sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy/>
</sp:Wss10>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>

我已经通过 Maven 和 wsdl2java 生成了 stub ,但身份验证尚未成功。我不知道从哪里开始履行客户端的政策。我发现了几个仅使用 UsernameToken 或 X.509 证书的示例,但没有发现此策略的明显复杂性。我正在努力将所有的碎片拼凑在一起。这是来自 CXF 网站的示例,希望它是我正在寻找的内容的开始。

        Client client = ClientProxy.getClient(greeter);
Map<String, Object> props = new HashMap<String, Object>();
props.put("action", "UsernameToken");
props.put("user", "alice");
props.put("passwordType", "PasswordText");
WSS4JOutInterceptor wss4jOut = new WSS4JOutInterceptor(props);

client.getOutInterceptors().add(wss4jOut); ((BindingProvider)greeter).getRequestContext().put("password","password");

注意:我无法控制 wsdl 或 Web 服务。

最佳答案

由于您使用的是 CXF 的 wsdl2java maven 插件,因此会生成许多类,包括 Service 类。因此,您需要做的是从生成的服务类中获取 stub 并注入(inject)提供的用户名和密码,然后它应该可以工作。像这样的事情:

final YourService service = new YourService();
final YourStub stub = service.getService();

final Map ctx = ((BindingProvider)stub).getRequestContext();

ctx.put("ws-security.username", userName);
ctx.put("ws-security.password", password);

stub.callYourMethod();

PS:请确保您拥有正确的库,我只使用了 cxf-bundle,没有使用 cxf 中的任何其他内容,并且它有效!早些时候它不起作用,因为我单独包含了来自 cxf 的库。

代码将自动处理 wsdl 文件中提到的所有策略

关于java - Apache CXF Java 客户端的安全策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35142396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com