Tomcat7 と axis2 を使用して Java Web サービスをデプロイしています。
server.xml で、3 つのコネクタを構成しました (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 で、次の 3 つの transportReceiver を構成しました。
<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]
1 つのトランスポート受信者が常に私のメッセージを処理しているようです。現在の呼び出しに実際に使用されているトランスポートレシーバー (またはポート) を検出する方法はありますか?
BR、ジャセク