大家好,感謝任何人閱讀這篇文章。JNDI over SSL UnknownHostException
我一直在掙扎幾天,試圖改變我的客戶端服務器JNDI查詢從http到https的通信。
我正在使用JBoss 4.2.0並升級它目前不是一個選項。
我在客戶端做的是按照jboss手冊中的建議更改網址。
System.setProperty("javax.net.ssl.trustStore", "C:/Program Files (x86)/localhost.truststore");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStorePassword", "opensource");
System.setProperty(HTTPSClientInvoker.IGNORE_HTTPS_HOST,"true");
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.HttpNamingContextFactory");
jndiProperties.put(Context.PROVIDER_URL, "https://"+serverIp+":8443/invoker/JNDIFactory"
final Context context = new InitialContext(jndiProperties);
T facade = (T) context.lookup(facadeName);
return facade;
以前的網址是:
jndiProperties.put(Context.PROVIDER_URL, "jnp://"+serverIp+":1099");
和contextfactory是
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
的SERVERIP是用戶進入真正的服務器。我不想使用網絡主機名稱,因爲我的服務器中沒有dns服務器。
我對jnp url和jnp命名工廠沒有任何問題,但是當我嘗試通過SSL進行訪問時,HTTPNamingContextFactory.getNamingServer(URL providerURL)
中的Jboss代碼覆蓋了我的ip,其中包含客戶端無法識別的主機名。
它從服務器做一些編組,並採取我的Linux服務器主機文件中定義的第一個主機條目。
的HttpInvokerProxy做,最終通過從服務器,這是寫externalURLValue:
"https://myhost:8443/invoker/JMXInvokerServlet".
我的客戶不知道如何處理這個「爲myhost」這樣做,這需要在服務器的真實IP ,我最初在客戶端的JNDI屬性中提供。
我能夠做的唯一的事情就是編輯hosts在客戶端的Windows系統hosts文件,文件,並用真實IP添加一個條目myhosts,但是這當然是
的不是生產的解決方案環境,因爲我不能要求我的用戶進行這樣的修改。
所以我得到這個例外在客戶端:
javax.naming.CommunicationException:操作失敗[根異常是java.rmi.ServerException:IOE;嵌套的例外是:
java.net.UnknownHostException: myhost
我的服務器的部署/ HTTP-invoker.sar/META-INF /的jboss-service.xml的是下面,如果我嘗試useHostName設置爲false,那麼將使用本地主機IP
127.0.0.1而不是myhost,這沒什麼幫助,因爲我只需要保留我最初提供的ip。
我是JBoss的新手,所以我會很感激任何問題,我做錯了什麼,以及如何在不升級JBOSS的情況下解決這個問題。
謝謝
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server>
<!-- $Id: jboss-service.xml 26202 2004-11-29 16:54:36Z starksm $ -->
<server>
<!-- The HTTP invoker service configration
-->
<mbean code="org.jboss.invocation.http.server.HttpInvoker"
name="jboss:service=invoker,type=https">
<!-- Use a URL of the form http://<hostname>:8080/invoker/EJBInvokerServlet
where <hostname> is InetAddress.getHostname value on which the server
is running.
-->
<attribute name="InvokerURLPrefix">https://</attribute>
<attribute name="InvokerURLSuffix">:${https.port}/invoker/EJBInvokerServlet</attribute>
<attribute name="UseHostName">true</attribute>
</mbean>
<!-- Expose the Naming service interface via HTTP -->
<mbean code="org.jboss.invocation.http.server.HttpProxyFactory"
name="jboss:service=invoker,type=http,target=Naming">
<!-- The Naming service we are proxying -->
<attribute name="InvokerName">jboss:service=Naming</attribute>
<!-- Compose the invoker URL from the cluster node address -->
<attribute name="InvokerURLPrefix">https://</attribute>
<attribute name="InvokerURLSuffix">:${https.port}/invoker/JMXInvokerServlet</attribute>
<attribute name="UseHostName">true</attribute>
<attribute name="ExportedInterface">org.jnp.interfaces.Naming</attribute>
<attribute name="JndiName"></attribute>
<attribute name="ClientInterceptors">
<interceptors>
<interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor>
<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
<interceptor>org.jboss.naming.interceptors.ExceptionInterceptor</interceptor>
<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
</interceptors>
</attribute>
</mbean>
<!-- Expose the Naming service interface via clustered HTTP. This maps
to the ReadOnlyJNDIFactory servlet URL
-->
<mbean code="org.jboss.invocation.http.server.HttpProxyFactory"
name="jboss:service=invoker,type=http,target=Naming,readonly=true">
<attribute name="InvokerName">jboss:service=Naming</attribute>
<attribute name="InvokerURLPrefix">http://</attribute>
<attribute name="InvokerURLSuffix">:8080/invoker/readonly/JMXInvokerServlet</attribute>
<attribute name="UseHostName">true</attribute>
<attribute name="ExportedInterface">org.jnp.interfaces.Naming</attribute>
<attribute name="JndiName"></attribute>
<attribute name="ClientInterceptors">
<interceptors>
<interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor>
<interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
<interceptor>org.jboss.naming.interceptors.ExceptionInterceptor</interceptor>
<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
</interceptors>
</attribute>
</mbean>
</server>