內容摘要:
- 利用開源軟件properJavaRDP實現遠程桌面連接
- 如何讓Applet嵌入到網頁中正常運行
- 如何處理連接win7時的異常:Wrong modulus size! Expected 64+8got:264
正文:
客戶提出這樣一個功能,要求在網頁中打開遠程桌面。
首先想到的是有沒有這方面開源軟件,於是上網搜了一下,於是找到了rdesktop和properJavaRDP這兩個實現了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/