【问题标题】:axis2 over https starter questionaxis2 over https 入门问题
【发布时间】:2011-01-16 21:20:40
【问题描述】:
我正在尝试弄清楚如何通过 https 使用axis2。
axis2 指南说:
CommonsHTTPTransportSender 也可以
用于通过 https 进行通信。
还有:
请注意默认情况下 HTTPS
仅在服务器不工作时工作
期望对客户端进行身份验证
(仅限 1 路 SSL)和服务器所在的位置
有客户的公钥在其
信任商店。如果你想表演
SSL 客户端认证(2-way SSL),
你可以使用
Protocol.registerProtocol 的特性
HttpClient。
所以我的问题是轴的 HTTPS 有 2 种方法吗?
1) 使用 CommonsHTTPTransportSender
2) 取消注释 apache 配置上的 https 连接器??
还是只有 (1) 是标准方法??
客户端身份验证还有什么问题?我知道对于 apache 连接器,我只需要设置 clientAuth。这不适用于轴?
欢迎任何意见!
谢谢
【问题讨论】:
标签:
java
web-services
tomcat
https
axis2
【解决方案1】:
参考: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>
【解决方案2】:
这是我在我的 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 下,以避免添加专用的类路径。