java如何穿越防火墻
java如何穿越防火墻
有什么方法可以讓java穿越防火墻呢?小編來告訴你!下面由學(xué)習(xí)啦小編給你做出詳細(xì)的java穿越防火墻方法介紹!希望對(duì)你有幫助!
java穿越防火墻方法一:
下載與安裝
建議您在繼續(xù)進(jìn)行線上安裝之前,請(qǐng)先停用網(wǎng)際網(wǎng)路防火墻。在某些情況下,預(yù)設(shè)的防火墻設(shè)定為拒絕所有自動(dòng)或線上安裝,例如 Java 線上安裝。如果防火墻配置不正確,則在某些情況下可能會(huì)使Java 的下載/安裝作業(yè)中止。
請(qǐng)參閱您的特定網(wǎng)際網(wǎng)路防火墻手冊(cè),以取得有關(guān)如何停用「網(wǎng)際網(wǎng)路防火墻」的說明。
請(qǐng)移至 Java.com 并按一下 [免費(fèi) Java 下載] 按鈕在 Firefox 下載頁面上,按下載按鈕啟動(dòng)安裝程序。
[檔案下載] 對(duì)話方塊將會(huì)出現(xiàn),提示您儲(chǔ)存下載的檔案。
要執(zhí)行安裝程式,按一下 [下載管理員] 視窗中的檔案或是您平常儲(chǔ)存下載檔案的地方。依據(jù)您的安全性設(shè)定而定,可能會(huì)出現(xiàn)對(duì)話方塊,要求您提供繼續(xù)進(jìn)行的權(quán)限。確認(rèn)您要繼續(xù)安裝。
java穿越防火墻方法二:
開發(fā)人員必須用各種迂回的方法,而沒有一種是“特別好的”。開發(fā)人員通常寫一個(gè)servlet來截取HTTP請(qǐng)求,并將它們導(dǎo)向到EJBs,這種方法很不正規(guī)。
另一種方法是運(yùn)用信道(tunneling)技術(shù),如HTTP上的RMI,這種方法會(huì)給性能帶來很大的影響。除了上述的兩種方法外,還有一種更好的方法。通過運(yùn)用Java Secure Socket Extension(JSSE),你就可以很好地解決這個(gè)問題。
在一個(gè)J2EE應(yīng)用程序中,Enterprise JavaBeans(EJB)通常是位于應(yīng)用程序服務(wù)器中的,而且一個(gè)Web前端是用servlets、JavaServer Pages(JSP)和標(biāo)簽庫創(chuàng)建的。在大多數(shù)情況下,這些組件都位于企業(yè)防火墻的同一側(cè),他們之間沒有防火墻(見圖1)。
圖1. 傳統(tǒng)的J2EE應(yīng)用程序 但有時(shí)侯,防火墻會(huì)把客戶端同服務(wù)器隔離開(見圖2)。在一個(gè)典型的例子中,一個(gè)胖客戶端(thick client)(如一個(gè)基于Swing的客戶端)與一個(gè)應(yīng)用程序服務(wù)器交互。(這些客戶端通常用諸如Java Web Start這樣的技術(shù)來安裝,所以最終用戶既可以得到自動(dòng)化部署的好處,也可以得到一個(gè)富客戶端的好處。)
這就會(huì)出現(xiàn)一個(gè)問題。Remote Method Invocation(RMI)是在Java Remote Methods Protocol(JRMP)、Internet Inter Orb Protocol(IIOP)、或一個(gè)如T3的私有協(xié)議上實(shí)現(xiàn)的。要穿越防火墻實(shí)現(xiàn)RMI而又不在防火墻中另外打洞,就需要我們采用一些方法。
大多數(shù)可選方法都有不足,這個(gè)問題有許多解決方法,每種方法都各有利弊。你可以嘗試HTTP上的RMI信道技術(shù)。JavaSoft中的RMI帶有一個(gè)缺省的HTTP信道機(jī)制。如果RMI引擎不能用JRMP聯(lián)系RMI服務(wù)器,它就會(huì)開一個(gè)通道,使請(qǐng)求穿過HTTP并與一個(gè)可以截取這個(gè)請(qǐng)求的Web組件對(duì)話。
JavaSoft提供了一個(gè)CGI腳本和一個(gè)servlet,它們可以截取這些請(qǐng)求并將這些請(qǐng)求導(dǎo)向到適當(dāng)?shù)腅JBs。然而,這種方法不支持HTTPS,所以如果需要安全的訪問,你就必須實(shí)現(xiàn)HTTPS信道。另外,甚至連JavaSoft都說,HTTP上的RMI信道可能會(huì)讓性能嚴(yán)重下降。
圖2. 被一個(gè)防火墻隔開的客戶端和服務(wù)器 第二種方法是在私有的協(xié)議上(如那些用于各種應(yīng)用程序服務(wù)器中的協(xié)議)用RMI信道。例如,BEA WebLogic支持T3協(xié)議上的信道。這種方法可以部分地解決我們?cè)贖TTP上的RMI信道技術(shù)中提到的性能問題。然而,這會(huì)意味著應(yīng)用程序可能會(huì)依賴私有擴(kuò)展,這是許多Java開發(fā)人員不惜任何代價(jià)全力想去避免的。
第三種方法是在EJBs周圍編寫一個(gè)瘦Web層,如一個(gè)servlet。胖客戶端發(fā)送一個(gè)被該servlet截取的HTTP請(qǐng)求,然后它與EJB層通訊,并將響應(yīng)返回給客戶端。這就意味著,每個(gè)請(qǐng)求都必須轉(zhuǎn)換成一個(gè)HTTP請(qǐng)求并發(fā)送回來。
但是運(yùn)用JSSE,你就可以很容易地在SSL上實(shí)現(xiàn)RMI。這種方法只需要寫少量的代碼,而且對(duì)于客戶端來說,就好象它在JRMP或IIOP上調(diào)用一個(gè)RMI。這是服務(wù)器和客戶端之間進(jìn)行通訊的一個(gè)安全的通道。
JSSE是一組Java包,它支持安全的Internet通訊。它實(shí)現(xiàn)了一個(gè)Secure Sockets Layer(SSL)的Java版本和Transport Layer Security(TLS)協(xié)議,并包括數(shù)據(jù)加密、服務(wù)器驗(yàn)證、消息完整性和可選的客戶端驗(yàn)證功能。通過運(yùn)用JSSE,你就可以在服務(wù)器和客戶端之間提供安全的數(shù)據(jù)通道。
第一步:安全套接庫
缺省情況下,RMI運(yùn)用JRMP。EJB規(guī)范中提到它支持IIOP以及JRMP上的RMI。應(yīng)用程序服務(wù)器的供應(yīng)商負(fù)責(zé)提供對(duì)根本協(xié)議的支持。但是運(yùn)用JSSE,你就可以覆蓋這個(gè)層并用SSL替代它。
第一步是實(shí)現(xiàn)安全套接庫(secure socket libraries)。你可以在JavaSoft的Java Development Kit(JDK)文件包中找到這些類。實(shí)現(xiàn)這個(gè)套接庫的類是RMISSLServerSocketFactory.java和RMISSLClientSocketFactory.java?,F(xiàn)在,我們來看看實(shí)現(xiàn)這些安全套接庫的代碼。
創(chuàng)建一個(gè)SSL server socket,并返回它讓J2EE容器使用(見列表1)。通過運(yùn)用JDK中捆綁的keytool就生成了keystore。該文件作為testkeys存儲(chǔ),可以訪問該socket。這個(gè)文件必須可以在包含套接庫的.jar文件的根目錄中找到,而且可以從該位置下載key store。
SSLClientSocketfactory的代碼更簡(jiǎn)單(見列表2)??蛻舳嗽诜?wù)器監(jiān)聽的端口中創(chuàng)建一個(gè)SSLSocket。JSSE自動(dòng)處理其它事宜。
列表2. SSLClientSocketFactory 的代碼更簡(jiǎn)單??蛻舳嗽诜?wù)器監(jiān)聽的端口中創(chuàng)建了一個(gè)SSLSocket。JSSE包自動(dòng)處理其它事宜。
第二步:實(shí)現(xiàn)你的EJBs
照常實(shí)現(xiàn)你的EJBs。編寫遠(yuǎn)程接口、home接口和bean。注意,你不必在此做任何特殊的安全套接擴(kuò)展。(本文所附的代碼樣例包含一個(gè)HelloWorld EJB,你可以用它進(jìn)行測(cè)試。)查看一下ejb-jar.xml部署描述符,你可以看到這是普通的代碼,沒有特殊的擴(kuò)展。
第三步:通知容器
最后一步是要讓容器知道EJB應(yīng)該用自定義的安全套接庫,而不是缺省的套接庫(通常是JRMP、IIOP和T3)。不幸的是,這并不是在EJB規(guī)范中指定的一個(gè)標(biāo)準(zhǔn)的特征,所以它必須在供應(yīng)商特定的部署描述符中說明。
通過這些簡(jiǎn)單的步驟,我們就可以很容易地穿越防火墻安全地訪問EJBs了,而不用在防火墻中打更多的洞。同時(shí),性能也不會(huì)受影響。在人們的安全意識(shí)不斷提高的情況下,這的確是個(gè)很好的方法。
java穿越防火墻方法三:
java.net
類:DatagramPacket
DatagramSocket
或者:ServerSocket
Socket
這些類都有一個(gè)返回端口的方法,ServerSocket是getLocalPort() ,其他三個(gè)是getPort()。如果返回的端口是80,那么就禁止接收或者發(fā)送數(shù)據(jù),并給與適當(dāng)?shù)奶崾拘畔ⅰ?br/>
看了“java如何穿越防火墻 ”文章的還看了:
4.防火墻分類大全