gpt4 book ai didi

java - CXF 生成的 WSDL 不包含 WS-SecurityPolicy 定义

转载 作者:行者123 更新时间:2023-11-30 09:47:08 25 4
gpt4 key购买 nike

我想使用 WS-Security 来保护我的网络服务。我正在使用 CXF 公开我的端点,并使用从 Java 代码生成的 WSDL(也称为 CXF 代码优先服务)。

本教程解释了在手动管理 WSDL 时如何将 WS-Security 与 CXF 结合使用:http://www.ibm.com/developerworks/java/library/j-jws13/index.html

但是,我使用 CXF 自动生成 WSDL。 生成的 WSDL 并不表示客户端应该使用 WS-Security。我希望 WSDL 中有类似的内容:

<wsp:Policy wsu:Id="UsernameToken" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding/>
<sp:SupportingTokens>
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken=".../IncludeToken/AlwaysToRecipient"/>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>

我没有使用 Spring,但我使用的是嵌入式 Jetty。这是我连接所有内容的方式:

CXFNonSpringServlet cxfServlet = new CXFNonSpringServlet() {
private static final long serialVersionUID = 1L;

@Override
protected void loadBus(ServletConfig sc) {
super.loadBus(sc);

Map<String, Object> inProps = new HashMap<String, Object>();
inProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
inProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
inProps.put(WSHandlerConstants.PW_CALLBACK_REF, new TestCallback());

JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setBus(bus);
factory.setServiceBean(new MyServiceEndpointImpl());
factory.setAddress("/myservice");
factory.getInInterceptors().add(new WSS4JInInterceptor(inProps));
factory.create();
}
};

Server server = new Server(8080);
ContextHandlerCollection contexts = new ContextHandlerCollection();
server.setHandler(contexts);
ServletContextHandler rootContext = new ServletContextHandler(contexts, "/");
rootContext.addServlet(new ServletHolder(cxfServlet), "/soap/*");
server.start();

最佳答案

目前不支持。

Note: at this point, WS-SecurityPolicy support is ONLY available for "WSDL first" scenarios. The WS-SecurityPolicy fragments can only be pulled from WSDL. In the future, we plan to enable various code first scenarios as well, but at this time, only WSDL first is available.

http://cxf.apache.org/docs/ws-securitypolicy.html

有人在这里解释了同样的问题,并用@Policy公开了一个解决方案。但是,CXF <=2.4.1 的解决方案很麻烦(该策略在 WSDL 中添加了两次)。

http://cxf.547215.n5.nabble.com/WS-Security-policy-in-wsdl-for-java-first-approach-td569052.html

重复问题现已修复,将在 2.4.2 中发布(参见 https://issues.apache.org/jira/browse/CXF-3668)

关于java - CXF 生成的 WSDL 不包含 WS-SecurityPolicy 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6832849/

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