2011-07-29 4 views
1

sun.net.www.ParseUtil.decode()을 호출하는 기존 코드가 있습니다. 벤더 고유의 함수를 호출하는 것을 피하고 싶습니다. 따라서이 호출을 다른 것으로 대체하려고합니다.sun.net.www.ParseUtil.decode() vs java.net.URLDecoder.decode()

java.net.URLDecoder.decode()를 드롭 인 대체품으로 사용할 수 있습니까, 아니면 내가주의해야 할 것이 있습니까?

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()에서 거의 정확히 일치합니다)

답변

2

그것은 어려운 :

호출은 사용자 정의 클래스 로더 내에서 정상적인 경로에 파일의 URL을 변환하는 데 사용됩니다 말하자면, ParseUtil의 의미가 잘 문서화되어 있지 않기 때문입니다.

나는 완전히 코드를 버리고 URIFile(URI) 생성자를 사용하는 코드로 대체한다고 생각합니다.

+0

물론입니다! 그것 * 같지 않더라도, 태양 impl는 내일 바뀔 수 있었다! Yikes! 그것을 바꿔 라! – Bohemian

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() 작업을 수행하는 모든 코드는 즉시 의심됩니다. 새 파일 (url.toURI()). getPath() 또는 .getAbsolutePath()를 시도하십시오.

다음 질문은 권한 구성에 대해 어떻게 생각합니까? 그게 너를 어디에도 못 가게 해. 시큐러티 매니저는 필요에 따라서 그 자체를 실행 해, 결과적으로 얻을 수있는 액세스권을 체크해, 필요에 따라서 SecurityException를 슬로우합니다. 허가서를 직접 작성하는 것은 귀하에게 그러한 허가를 제공하지 않습니다.

+0

코드는 사용자 정의 클래스 로더의 getPermissions() - 메소드에 있습니다. 나는 이것이 보안 관리자에게 전달되는 권한이라고 믿습니다. 그래서 그것이 목적을 수행하는 것 같습니다. 또한 Sun의 UrlClassLoader (내 질문에 대한 업데이트 참조)에서 거의 cut'n'paste 였음을 알 수 있습니다. Sun은 자신이하는 일을 알고 있다고 생각합니다. –

+0

@ 라스무스 페이버 OK. 다시 자르거나 붙여 넣기, Sun은 JDK에서 그 당시에 존재하는 버전의 코드가 복사되었거나 ParseUtil.decode()라는 것을 알고있었습니다. 그것은 전혀 변하지 않았을 가능성이 높지만 ... 그럼에도 불구하고 외부 코드가 그것에 의존해서는 안됩니다. 내가 게시 한 URI 코드의 변형을 시도해보십시오. – EJP