我试图找出如何在https上使用axis2 axis2指南说:
CommonsHTTPTransportSender也可以 用于通过https进行通信。
也:
请注意,默认情况下为HTTPS 仅在服务器不工作时才有效 期望验证客户端 (仅限单向SSL)和服务器所在的位置 拥有客户的公钥 信托商店。如果你想表演 SSL客户端身份验证(双向SSL), 你可以使用 Protocol.registerProtocol的功能 HttpClient的。
所以我的问题是,针对轴有两种HTTPS方法吗?
1)使用CommonsHTTPTransportSender
2)在apache配置上取消注释https连接器??
或者只有(1)是标准方法?
还有客户端身份验证的问题是什么?我知道对于apache连接器我只需要设置clientAuth。这不适用于轴?
欢迎任何输入!
感谢
答案 0 :(得分:0)
以下是我在我的axis.xml配置中使用的https连接器方法(Axis 1.4.1)。
<transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
<parameter name="port" locked="false">9002</parameter>
<parameter name="non-blocking" locked="false">true</parameter>
<parameter name="keystore" locked="false">
<KeyStore>
<Location>.keystore</Location>
<Type>JKS</Type>
<Password>changeme</Password>
<KeyPassword>changeme2</KeyPassword>
</KeyStore>
</parameter>
</transportReceiver>
我将我的密钥库转储到axis2-1.4.1 / lib下,以避免添加专用的类路径。
答案 1 :(得分:0)
参考:http://axis.apache.org/axis2/java/core/docs/servlet-transport.html
对于每个协议(HTTP和/或HTTPS),必须在axis2.xml中声明AxisServletListener实例。如果仅使用单个协议,则不需要进一步配置。例如,如果仅使用HTTP,则axis2.xml中必须存在以下声明:
<transportReceiver name="http" class="org.apache.axis2.transport.http.AxisServletListener"/>
如果同时使用HTTP和HTTPS,那么事情会变得有点复杂。原因是为了公开具有正确端点URI的WSDL,AxisServlet必须知道HTTP和HTTPS使用的端口。遗憾的是,servlet API不允许Web应用程序发现所有已配置的协议。它仅提供有关当前请求的协议,主机名和端口的信息。如果只配置了一个AxisServletListener,则此信息足以让AxisServlet自动检测端口号。如果同时使用HTTP和HTTPS(或者通过AxisServlet以外的传输检索WSDL),则AxisServlet无法知道端口号,直到它为每个协议处理了至少一个请求。要在此方案中使WSDL生成可预测,有必要在axis2.xml中显式配置端口号,如下例所示:
<transportReceiver name="http" class="org.apache.axis2.transport.http.AxisServletListener">
<parameter name="port">8080</parameter>
</transportReceiver>
<transportReceiver name="https" class="org.apache.axis2.transport.http.AxisServletListener">
<parameter name="port">8443</parameter>
</transportReceiver>