[properJavaRDP]在網頁中實現遠程連接


內容摘要:

  • 利用開源軟件properJavaRDP實現遠程桌面連接
  • 如何讓Applet嵌入到網頁中正常運行
  • 如何處理連接win7時的異常:Wrong modulus size! Expected 64+8got:264

正文:

  客戶提出這樣一個功能,要求在網頁中打開遠程桌面。

  首先想到的是有沒有這方面開源軟件,於是上網搜了一下,於是找到了rdesktopproperJavaRDP這兩個實現了RDP協議的JAVA項目。properJavaRDP是基於rdesktop的,使用起來比較簡單。可以在linux,windows,mac下運行,幾乎可以遠程連接到所有windows版本。

    第一步下載jar包。

  下載地址:http://sourceforge.net/projects/properjavardp/files/properjavardp/1.1/

  注意,只需要下載properJavaRDP-1.1.jar和properJavaRDP14-1.1.jar這兩個jar就可以了。

  下載log4j-java11,地址:http://sourceforge.net/projects/properjavardp/files/log4j-java11/1.5.3/

  下載java-getopt-1.0.14.jar,地址:http://www.urbanophile.com/arenn/hacking/getopt/java-getopt-1.0.14.jar

 

  第二步,修正連接win7時的錯誤。

  在eclipse中新建一個Java Project,導入jar包,找到net.propero.rdp包下的Rdesktop.java右鍵Run As——>Run Configurations,在彈出的界面中選擇Arguments,在Program arguments中填入IP及端口,例如122.232.242.172:3389,就可以打開遠程桌面了。

  但是如果你連接的主機是win7或者win2008時,就會出現如下錯誤:

  Wrong modulus size! Expected 64+8got:264!

  官方也給出了這個問題的補丁,地址:http://sourceforge.net/p/properjavardp/patches/1/

  將補丁中給出的Secure.java重新編譯成class文件,替換properJavaRDP-1.1.jar中的同名文件即可解決此問題。

 

  第三步,在網頁中通過Applet實現遠程桌面。

  新建一個web project。在webRoot下新建一文件夾,名字隨便,我這里叫applet。將上面修正過的4個jar包放到applet下。    

  注意:由於html訪問不到WEB-INF目錄中的內容,所以jar包不能發到WEB-INF/lib下。

  目錄結構如圖:

      

  在index.jsp中嵌入net.propero.rdp.applet.RdpApplet.class,代碼如下:

<applet
    	code="net.propero.rdp.applet.RdpApplet.class"
    	codebase="applet"
    	archive="java-getopt-1.0.14.jar,log4j-java1.1.jar,properJavaRDP-1.1.jar,properJavaRDP14-1.1.jar"
    	width = "800"
        height = "800"
        name="webRDP"
    	>
		<param name="server" VALUE="12X.23X.24X.17X"/>
		<param name="port" value="3389"/>
    </applet>

  將代碼部署到tomcat中,啟動后,在網頁中訪問index.jsp頁面。

  首次打開,瀏覽器會提示裝JAVA插件,點擊安裝。JAVA插件是必須需要安裝的,否則無法運行applet。

  安裝java插件后重啟瀏覽器,重新訪問index.jsp,出現安全警告,勾選,運行。

  

 還有可能會有如下警告:

  

這時候,即使我們選不阻止,瀏覽器也不會允許這個程序運行,這是因為程序依賴的jar不被信息。所以需要對jar進行數字簽名來使瀏覽器信任此程序。

還有可能遇到下面異常:Java.lang.SecurityException: trusted loader attempted to load sandboxed resource from http://xxxx:xx/xx/xx.jar。

或者Exception in thread "Thread-43" java.security.AccessControlException: access denied ("java.util.PropertyPermission" "gnu.posixly_correct" "read")

以及BlockedException,都可能是由於沒有數字簽名引起的。

數字簽名參考此鏈接:http://blog.csdn.net/dongzi87/article/details/9140361

 

  第四步,頁面轉換。

  這一步一定不能忽略。轉換之后的頁面對瀏覽器更友好,兼容性更好。

    就我的經歷而言,前面幾步反復試了幾次,還是會有SecurityException或者BlockedException之類的異常。頁面轉換之后,程序可以正常運行了。

  所以如果前面幾步沒有成功,也不要灰心,嘗試轉換下頁面試試。

  運行JAVA安裝目錄下bin文件夾下面的HtmlConverter.exe,對index.jsp進行轉換。

  轉換為object的方式嵌入。

<object
classid = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
codebase = "http://java.sun.com/update/1.6.0/jinstall-6u27-windows-i586.cab#Version=6,0,0,7"
WIDTH = "800" HEIGHT = "800" NAME = "webRDP" ALIGN = "top" >

 

  至此,大功告成。

 

補充:

  1、applet調試:可以在eclipse中Debug As——>Java Applet來進行運行和調試.如果applet在eclipse中能正常運行,而在頁面運行時出現上面提到的異常,除了檢查代碼正確性之外,可以通過對jar包數字簽名和頁面裝換來解決.不要通過編碼是形式來對applet提升權限.

  applet在頁面中運行,可以通過java控制台來查看異常.如果沒有打開,在控制面板---java---高級中打開控制台,如圖:

  

   2、相關code:https://code.google.com/p/lixia-javardp/

 

 

 

      

      

  

 

  

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM