1

を呼び出しているレガシーコードがいくつかありますsun.net.www.ParseUtil.decode()。ベンダー固有の関数を呼び出さないようにしたいので、呼び出しを別のものに置き換えたいと思います。

ドロップインの代わりにjava.net.URLDecoder.decode()を使用できますか、それとも注意すべき点がありますか?

この呼び出しは、ファイルURLをカスタムクラスローダー内の通常のパスに変換するために使用されます。

URL url = //...
if(url.getProtocol().equals("file"))) {
    String path = url.getFile().replace('/', File.separatorChar);
    path = ParseUtil.decode(path);
    if (path.endsWith(File.separator)){
       path += "-";
    }
    p = new FilePermission(path, SecurityConstants.FILE_READ_ACTION);
 }

(これはとほぼ同じコードであることに注意してくださいjava.net.UrlClassLoader.getPermissions()

4

2 に答える 2

2

ParseUtilのセマンティクスは十分に文書化されていないため、言うのは難しいです。

URIコードを完全に捨てて、File(URI)コンストラクターを使用するコードに置き換えると思います。

于 2011-07-29T06:51:49.757 に答える
1
URL url = //...
if(url.getProtocol().equals("file"))) {
    String path = url.getFile().replace('/', File.separatorChar);
    path = ParseUtil.decode(path);
    if (path.endsWith(File.separator)){
       path += "-";
    }
    p = new FilePermission(path, SecurityConstants.FILE_READ_ACTION);
 }

このコードが何か役に立つことをしているとは思えません。確かに、その replace() 操作を行うコードはすぐに疑われます。new File(url.toURI()).getPath() または .getAbsolutePath() を試してください。

次の質問は、アクセス許可を構築するために何をしていると思いますか? それもあなたをどこにも連れて行きません。Security Manager は、必要に応じてそれを行い、結果のアクセス許可を確認し、必要に応じて SecurityException をスローします。自分で Permission を作成しても、その許可は与えられません。

于 2011-07-29T08:53:39.053 に答える