4

特定のフォルダからいくつかのファイルをアップロードして削除するアプレットがありますが、JavaScript コードからアプレット関数を呼び出すと問題が発生し、そこからその関数を呼び出すと正常init()に動作します。

私のアプレットコード:

public class Uploader extends Applet {
   String serverPath;
   String clientPath;
   private JSObject win;
   @Override
   public void init() {
       serverPath = getParameter("serverPath");
       clientPath = getParameter("clientPath");
       try {
           win = JSObject.getWindow(this);
       } catch (JSException e) {
           log.warning("Can't access JSObject object");
       }
       upload(topic,clientPath);
   }
   public void upload(String topic,String clientPath) {
       log.log(Level.SEVERE, "upload functiond");
       DefaultHttpClient client = new DefaultHttpClient();
       MultipartEntity form = new MultipartEntity();
       log.log(Level.SEVERE, "upload functiond2");
       try {
            File directory = new File(clientPath);
            log.log(Level.SEVERE, "upload functiond2.2");
            File[] files = directory.listFiles();
            log.log(Level.SEVERE, "upload functiond2.5");
            int i = 0;
            for (File file : files) {
                log.log(Level.SEVERE, "upload functiond2.6");
                i++;
                form.addPart("file" + String.valueOf(i), new FileBody(file));
                System.out.println("adding file " + String.valueOf(i) + " " + file);
                log.log(Level.SEVERE, "adding file " + String.valueOf(i) + " " + file);
            }
            log.log(Level.SEVERE, "upload functiond3");
            form.addPart("topic", new StringBody(topic, Charset.forName("UTF-8")));
            form.addPart("action", new StringBody(action, Charset.forName("UTF-8")));
            form.addPart("path", new StringBody(serverPath, Charset.forName("UTF-8")));
            HttpPost post = new HttpPost(serverPath);
      ....

これは私のjavascriptコードです:

document.applet.upload(title,"c:\scan");

javascript のみから呼び出した場合、ログは次のように出力されます。

log.log(Level.SEVERE, "upload functiond2.2");

initアプレットのメソッド から呼び出すと、正常に動作することに注意してください。

コードを にラップしますが、PriviligedAction一歩だけ前進してハングアップします

log.log(Level.SEVERE, "upload functiond2.5");
4

1 に答える 1

4

Java と JS の相互作用は、セキュリティを複雑にします。JRE は JS を信頼できないため、コードを含む「一連の操作」全体が信頼できないと判断します。それを修正する方法があります。

コードは でラップし、 のいずれかのメソッドPrivilegedAction使用して呼び出す必要があります。ドキュメントの上部を見てください。(メソッドの上) で使用例を確認します。AccessControllerdoPrivileged(..)AccessController

于 2012-09-11T01:05:00.187 に答える