昨天真郁悶....部門老大給我提出了一種難于想象的需求,通常我們從網(wǎng)站上下載文件都有IE彈出框。
而他對我的要求是:不要彈出IE對話框,點按鈕后直接把文件保存到本地。
當(dāng)時即時暈倒,都不知道是什么客戶來的,居然有這種需求。-_-!
綜合考慮后,我決定用applet在客戶端運行一段代碼。在客戶端里用apache的開源項目httpClient模擬http請求(如輸入用戶名密碼登陸,瀏覽某個連接下載等)。由于要涉及到讀寫客戶端的磁盤文件,所以在客戶端運行程序的時候必定會拋出securityException。當(dāng)時在這里折騰了很久,老是把注意力里集中在修改客戶端的安全策略文件上。
事實上,有一種更好的辦法,那就是對applet程序所依賴的jar包進行數(shù)字簽名。
步驟如下:
打開命令行窗口,定位到c:/目錄下。
1、keytool -genkey -keystore pepper.store -alias pepper
這個命令用來產(chǎn)生一個密匙庫,執(zhí)行完畢后應(yīng)該在c:/中產(chǎn)生一個pepper.store的文件,這里的pepper是我自己的名字,你可以對它進行修改。另外在執(zhí)行命令的時候還有提示你輸入密匙庫的密碼,這里你一定要記住,否則后面要用的時候無法輸入。
2、 keytool -export -keystore pepper.store -alias pepper -file pepper.cert
這個命令用來產(chǎn)生簽名時所要用的證書,同樣這里的pepper也可以換成你自己需要的名字。這個命令執(zhí)行完后在c:/中產(chǎn)生一個pepper.cert的文件。
3、 jarsigner -keystore pepper.store myapplet.jar pepper
這個命令用上面產(chǎn)生的證書將我們的jar文件進行了簽名。(myapplet.jar是我們項目中所依賴的jar包)
執(zhí)行完以上三步之后,就已經(jīng)完全可以了。而不需要像網(wǎng)上某些文章說的那樣還要修改客戶端的安全策略文件。
最后在頁面上把applet標(biāo)記加上
<applet code="Tasdf.class" CODEBASE = "." archive="myapplet.jar" width=30 height=15>
</applet>
而他對我的要求是:不要彈出IE對話框,點按鈕后直接把文件保存到本地。
當(dāng)時即時暈倒,都不知道是什么客戶來的,居然有這種需求。-_-!
綜合考慮后,我決定用applet在客戶端運行一段代碼。在客戶端里用apache的開源項目httpClient模擬http請求(如輸入用戶名密碼登陸,瀏覽某個連接下載等)。由于要涉及到讀寫客戶端的磁盤文件,所以在客戶端運行程序的時候必定會拋出securityException。當(dāng)時在這里折騰了很久,老是把注意力里集中在修改客戶端的安全策略文件上。
事實上,有一種更好的辦法,那就是對applet程序所依賴的jar包進行數(shù)字簽名。
步驟如下:
打開命令行窗口,定位到c:/目錄下。
1、keytool -genkey -keystore pepper.store -alias pepper
這個命令用來產(chǎn)生一個密匙庫,執(zhí)行完畢后應(yīng)該在c:/中產(chǎn)生一個pepper.store的文件,這里的pepper是我自己的名字,你可以對它進行修改。另外在執(zhí)行命令的時候還有提示你輸入密匙庫的密碼,這里你一定要記住,否則后面要用的時候無法輸入。
2、 keytool -export -keystore pepper.store -alias pepper -file pepper.cert
這個命令用來產(chǎn)生簽名時所要用的證書,同樣這里的pepper也可以換成你自己需要的名字。這個命令執(zhí)行完后在c:/中產(chǎn)生一個pepper.cert的文件。
3、 jarsigner -keystore pepper.store myapplet.jar pepper
這個命令用上面產(chǎn)生的證書將我們的jar文件進行了簽名。(myapplet.jar是我們項目中所依賴的jar包)
執(zhí)行完以上三步之后,就已經(jīng)完全可以了。而不需要像網(wǎng)上某些文章說的那樣還要修改客戶端的安全策略文件。
最后在頁面上把applet標(biāo)記加上
<applet code="Tasdf.class" CODEBASE = "." archive="myapplet.jar" width=30 height=15>
</applet>