2014-07-13 3 views
1

localhost에 ServerSocket을 여는 프로젝트에 Eclipse Kepler (Windows 7)를 사용하면 80 포트입니다. VM 인수를위한 프로젝트 실행 구성의 속성, 이클립스에서예외 : 액세스가 거부 됨 ("java.net.SocketPermission" "localhost : 80" "listen, resolve")

C:\Users\John\Developpement\workspace\security\my.policy 

:

나는에있는 정책 파일 보안 관리자를 사용

-Djava.security.manager 
-Djava.security.policy=${workspace_loc}/security/my.policy 

실행 된 bin 파일입니다 (Eclipse에서 별도의 소스 및 출력 폴더 사용) :

C:\Users\John\Developpement\workspace\SocketApps\bin\TinyHttpd.class 

,:

grant codeBase "file:\C:\Users\John\Developpement\workspace\SocketApps\bin\-" { 
    permission java.net.SocketPermission "localhost:80", "listen,resolve"; 
}; 

이클립스에서 실행 :

Exception in thread "main" java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:80" "listen,resolve") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372) 
    at java.security.AccessController.checkPermission(AccessController.java:559) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at java.lang.SecurityManager.checkListen(SecurityManager.java:1134) 
    at java.net.ServerSocket.bind(ServerSocket.java:375) 
    at java.net.ServerSocket.<init>(ServerSocket.java:237) 
    at java.net.ServerSocket.<init>(ServerSocket.java:128) 
    at TinyHttpd.main(TinyHttpd.java:35) 

하는 코드에 도달하는 경우는 :

grant { 
    permission java.net.SocketPermission "localhost:80", "listen,resolve"; 
}; 

문제 disapp :

ServerSocket ss = new ServerSocket(80)); 

나는 codeBase 필터를 제거하는 경우 귀, 그래서 이것이 codeBase이 잘못 표현 된 방법이라고 상상해보십시오.

this question에 대해 제안 된 해결책을 시도했지만 작동하지 않습니다. 도와 주시겠습니까?

답변

1

문제점이 무엇인지 알았 기 때문에 내 자신의 질문에 답하십시오. 질문을 삭제하는 것이 더 나은지 확실하지 않은 경우 다른 사람에게 도움이 될 것이라고 생각합니다. 사회자가 말할. 코드베이스 값이 URL이며, 따라서 항상 코드 소스가 실제로에도 슬래시 (결코 백 슬래시) 디렉토리 분리 등을 활용해야합니다

참고 :

Oracle documentation에서 촬영 Win32 시스템에서. Win32 시스템 코드의 소스 위치가 실제로 C 인 경우 따라서 :

grant codeBase "file:/C:/somepath/api/" { 
    ... 
} 

이 초보자 실수 : 같은 \ somepath \ app \의 다음 정책 코드베이스 항목이 보일 것입니다.

관련 문제