使用AccessController.doPrivileged提升代碼權限!如果不期望客戶端修改JRE中的安全配置,可以選擇在代碼中提升,而這個就是我所期待的!
在客戶端彈出的jdk的對話框中只要用戶點擊信任,運行按鈕,也就是說如果信任此簽名,將可以執行此代碼:AccessController.doPrivileged(...),Applet權限也將得到提升。
具體示例代碼如下:
- private String runCmd(){
- String result = AccessController.doPrivileged(new PrivilegedAction<String>() {
- @Override
- public String run() {
- String res = null;
- //TODO like 'Runtime.getRuntime().exec(cmd)' etc.....
- return res;
- }
- });
- return result;
- }
就這樣,簡單的幾句話就搞定了。。。。
別忘了,最後需要做的是重新打jar包,簽名,然後將證書和keystore文件,jar文件重新發布到服務器測試:)
補充:
之前也曾寫過一篇文章《關於JS調用Applet的執行權限的問題》(http://blog.csdn.net/faye0412/article/details/4566400),裏面提到了使用SwingUtilities.invokeLater(new Runnable()...的方式,但是這種方法只能解決之前的簽名和Applet假死的情況,不能解決現在遇到的這種情況,所以,最好的方式是結合這兩種方法使用。問題完美解決!!