문제

사용자가 하드 드라이브에서 파일을 선택하는 기본 애플릿을 만들고이 파일의 첫 번째 줄을 읽고 추가 전처리를 위해 JavaScript로 전달한 다음 버튼을 클릭하면 업로드하려고합니다. HTTP 사후 요청을 통해 파일. 이 마지막 비트를 위해 복사하고 수정 한 파일 업로드를위한 매우 기본적인 오픈 소스 애플릿을 찾았습니다.

그러나 문제는 효과가 없다는 것입니다. 잘 작동하는 것처럼 보이지만 권한과 관련된 두 개의 걸림돌이 닿습니다. Java Console의 메시지에 따르면 애플릿은 다음 두 권한에 대한 액세스 거부 오류가 있다고 말합니다.

java.lang.RuntimePermission setFactory
java.io.FilePermission read

NetBeans에서 "자체 서명 된"옵션을 구축했을 때 이미 애플릿에 허가를 받았다고 생각했기 때문에이 이상한 것을 발견 한 다음 클릭하여 브라우저에서 작은 보안 팝업을 확인했습니다.

또한, 내가 직접 코딩 한 부분, 파일을 읽고 첫 번째 줄을 JavaScript로 전달하는 부분은 잘 작동합니다. 이것은 애플릿이 로컬 파일 시스템에서 읽을 수 있다는 명확한 지표입니다! 실제로 업로드를 시작하려고 할 때까지 문제가 시작되지 않습니다. 주목할 점은 업로드 프로세스가 새 스레드에서 실행되는 것처럼 보이지만 나머지는 스레드를 생성하지 않고 메인 클래스에서 실행된다는 것입니다.

나는 Java에게 총 6 명이며 Java의 실에 대해 거의 알지 못합니다. 어떻게 든이 새로운 스레드에 권한을 전달해야합니까? 아니면 그 효과에 뭔가? 미리 감사드립니다.

도움이 되었습니까?

해결책

보안 관리자 (관리자가 아닌 코드)에게 권한있는 작업을 수행 할 수있는 권한을 요청해야 할 것입니다. 여러 가지 이유로, 애플릿이 로컬 파일을 열 수있는 것은 일반적으로 좋은 일이 아니므로 꽤 많이 보호됩니다.

기본 키는 전화하는 것입니다 AccessController.doPrivileged() 그리고 거기가 있습니다 좋은 작은 튜토리얼 Java Ranch FAQ에서.

다른 팁

나는 해결하는 데 영원히 걸렸던 비슷한 문제가있었습니다. JavaScript에서 호출 된 애플릿 방법에는 정책 파일에 명시 적으로 부여하더라도 권한이 없습니다.

이 해결 방법은 나에게 효과가있었습니다 (애플릿이 루프하는 대기열에 명령을 추가) :http://blog.carrythezero.com/?p=5

여기서 위험을 이해해야합니다. 누구나 페이지에서 JavaScript를 수정하고 공급되는 것을 애플릿으로 변경할 수 있습니다. 제 경우에는 코드가 웹 서버에 절대 진행되지 않는다는 것을 알고 있으며 클래스가 서명되지 않으므로 정책 파일에 의해 부여 된 특정 위치에 있지 않으면 실패합니다.

아마도 JavaScript가 서명되지 않았기 때문일 것입니다. 특히 당신이 무엇을하고 있는지 모르는 경우 코드에 서명하지 않는 것이 좋습니다. 6U10 (아직 MAC에 있지 않음)에서 애플릿은 FileOpenService를 포함하여 JNLP를 사용할 수 있으므로 서명 할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top