0

3つの関数(テスト関数は含まない)を持つクラスを使用するJavaアプレットがあります。

  • 1つはファイルチューザーを実行し、選択したファイル(FileContentsと入力)を配列に追加するためのものです。
  • 次に、必要に応じて、そのファイルの一部をアレイから削除します。
  • 3つ目は、ftpサーバーにファイルをアップロードするためのものです。

    それらはすべてJavascriptコードから呼び出されます。最初の2つの機能は問題なく機能します。アップロード機能が機能していません、それはスローします:

java.security.AccessControlException:アクセスが拒否されました( "java.net.SocketPermission"(宛先ftpサーバー) "resolve")

アプレットは自己署名されています。私はを使用して[Yii Framework][1]います。
重要なコード:-アップローダーアップロード機能:

public void upload( String ftpServer, String username, String password, String filePath )
throws MalformedURLException, IOException
{
    if ( ftpServer != null && filePath != null && this.filesArray.length > 1 ) {
        StringBuffer sb = new StringBuffer( "ftp://" );
        //check for authentication, if username and password not provided assume annonymous access
        if ( username != null && password != null ) {
            sb.append( username );
            sb.append( ':' );
            sb.append( password );
            sb.append( '@' );
        }

        sb.append( ftpServer );
        sb.append( ":21" );
        sb.append( '/' );

        if ( !filePath.equals( "" ) ) {
            sb.append( filePath );
            sb.append( '/' );
        }

        StringBuffer sb2 = new StringBuffer( sb.toString() );
        //below: i < this.filesArray.length - 1 becouse last field is always empty
        for ( int i = 0; i < this.filesArray.length - 1; i++ ){ 
            sb.append( this.filesArray[ i ].getName() );
            sb.append( ";type=i" );

            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;

            try {
                URL url = new URL( sb.toString() );
                URLConnection urlConn = url.openConnection();

                bos = new BufferedOutputStream( urlConn.getOutputStream() );
                bis = new BufferedInputStream( this.filesArray[ i ].getInputStream() );

                int j;
                //read byte by byte until end of stream
                while ( ( j = bis.read() ) != -1 ) {
                    bos.write( j );
                }
            }
            finally {
                if ( bis != null ) {
                    try {
                        bis.close();
                    }
                    catch( IOException ioe ) {
                        ioe.printStackTrace();
                    }
                }
                if ( bos != null ) {
                    try {
                        bos.close();
                    }
                    catch ( IOException ioe ) {
                        ioe.printStackTrace();
                    }
                }
            }
            sb = sb2;
        }
    }
    else {
        System.out.println( "Ftp address incorrect or input file not available." );
    }
}

コードをデプロイする

    <script>
var attributes = { id:'uploader1Applet',
    code: 'filesUpload.uploaderApplet',
    archive:'<?php echo Yii::app()->getBaseUrl(true); ?>/java/uploaderApplet.jar',  width:1, height:1} ;


var parameters = {jnlp_href: '<?php echo Yii::app()->getBaseUrl(true);?>/java/upload-applet.jnlp'};   


     deployJava.runApplet(attributes, parameters, '1.6') ;

  • javascript宣言+初期化(初期化のみのジョブは、新しいFileContents配列をUploaderプロパティに割り当てることです。上記と同じビュー、異なるスクリプト):
var uploader = document.getElementById( 'uploader1Applet' ).getUploader();
      uploader.initialize();
  • アップロードメソッド呼び出し(アップローダー宣言+初期化と同じスクリプト):

uploader.upload(connAddress、connUsername、'<?php echo Yii :: app()-> session ['ftpPassword'];?>'、connRootFolder!= null?connRootFolder: "");

私の問題を解決する方法はありますか?

4

1 に答える 1

0

AccessController.doPrivileged(..)Javascript から呼び出される Java メソッドは、通常、信頼できるように呼び出しでラップする必要があります。

于 2012-09-10T08:12:19.967 に答える