我正在使用 tomcat7 和axis2 来部署java web 服务。
在 server.xml 中,我配置了三个连接器(http、https 至极服务器和客户端证书,https 仅带有服务器端证书):
<Connector port="8181" protocol="HTTP/1.1" />
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" clientAuth="true" keystoreFile=... truststoreFile=... />
<Connector port="8444" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" clientAuth="false" keystoreFile=... />
在axis2.xml中我配置了三个transportReceivers:
<transportReceiver name="http" class="org.apache.axis2.transport.http.AxisServletListener">
<parameter name="port">8181</parameter>
<parameter name="c1">none</parameter>
</transportReceiver>
<transportReceiver name="https" class="org.apache.axis2.transport.http.AxisServletListener">
<parameter name="port">8443</parameter>
<parameter name="c2">serverAndClient</parameter>
</transportReceiver>
<transportReceiver name="https" class="org.apache.axis2.transport.http.AxisServletListener">
<parameter name="port">8444</parameter>
<parameter name="c3">serverOnly</parameter>
</transportReceiver>
这很好用!我所有的 Web 服务都可以按预期在所有端口上访问。
不幸的是,我只想在 8443 上允许“无密码登录”(因为客户端将拥有证书),并在 8444 上允许“使用密码登录”。
在Java中我试过:
MessageContext msg = MessageContext.getCurrentMessageContext();
TransportInDescription tin = msg.getTransportIn();
String str = tin.getParameters().toString();
但我总是得到:
[Parameter : port=8444, Parameter : c3=serverOnly]
似乎一个传输接收器总是处理我的消息。有没有办法检测哪个传输接收器(或端口)真正用于当前调用?
BR,雅克