2009-03-06 9 views
5

Przygotowałem podstawowy aplet, w którym użytkownik wybiera plik ze swojego dysku twardego, odczytuje pierwszy wiersz tego pliku i przekazuje go do JavaScript, aby uzyskać dodatkowe przetwarzanie wstępne, a następnie po kliknięciu przycisku przycisk próbuje przesłać ten plik za pomocą żądania POST HTTP. Znalazłem bardzo prosty aplet Open Source do przesyłania plików, które skopiowałem i zmodyfikowałem dla tego ostatniego bitu.Aplet Java Uprawnienia

Kłopot w tym, że nie działa. Wygląda na to, że działa dobrze, ale wtedy mam dwa problemy związane z uprawnieniami. Komunikaty w konsoli Java powiedzieć, że aplet miał odmowa dostępu błędy na dwóch następujących uprawnień:

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

Uważam to dziwne, bo myślałem, że pozwolenie na aplet już kiedy zbudowano go z " autopodpisane "zaznaczone w NetBeans, a następnie kliknięte, aby potwierdzić małe wyskakujące okienko bezpieczeństwa w przeglądarce.

Również część, którą zakodowałem, gdzie czyta plik i przekazuje pierwszą linię do JavaScript działa dobrze. Jest to całkiem jasny wskaźnik, że aplet jest w stanie odczytać z lokalnego systemu plików! Problem nie zaczyna się, dopóki nie spróbuję rozpocząć przesyłania. Należy przypuszczać, że proces przesyłania wydaje się działać w nowym wątku, podczas gdy reszta z nich działa w głównej klasie bez tworzenia wątków.

Jestem całkowitą nowicjuszką w Javie i wiem bardzo niewiele o wątkach w Javie; czy muszę jakoś przekazać uprawnienia do tego nowego wątku? Czy coś w tym stylu? Z góry dzięki.

Odpowiedz

3

Prawdopodobnie należy poprosić menedżera bezpieczeństwa (kod, a nie administratora) o pozwolenie na wykonanie operacji uprzywilejowanej. Z różnych powodów nie jest dobrze, aby aplet mógł otworzyć lokalny plik, więc jest dość mocno strzeżony.

Podstawowy klucz to zadzwonić pod numer AccessController.doPrivileged(), aw sekcji Najczęściej zadawane pytania dotyczące Java Ranch znajduje się good little tutorial.

+0

doPrzywilijane jest niezwykle niebezpieczne. Podobnie jak podpisywanie apletów. –

+3

Jak pozwala aplety do odczytu plików. Niemniej jednak, jest tam i odpowiedź na to pytanie. –

0

To prawdopodobnie dlatego, że JavaScript jest niepodpisany. Zdecydowanie nie polecam podpisywania kodu, szczególnie jeśli nie wiesz, co robisz. Od 6u10 (nie na Macu) aplety mogą korzystać z JNLP, w tym FileOpenService, więc nie musisz podpisywać.

+0

nie JavaScript; Jawa. – Ricket

+0

Pytanie dotyczy kodu JavaScript. Moje wykształcone przypuszczenie jest takie, że jego JavaScript w kontekście kontroli dostępu jest przyczyną problemu. –

1

Miałem podobny problem, który trwał wiecznie, aby rozwiązać. Okazuje się, że metody apletów wywoływane z JavaScript nie mają uprawnień, nawet jeśli jawnie przyznasz je w pliku strategii.

To obejście pracował dla mnie (dodawanie poleceń do kolejki, które aplet pętle through): http://blog.carrythezero.com/?p=5

Upewnij się, że rozumiesz niebezpieczeństw tutaj: Każdy może modyfikować JavaScript na stronie i zmienić to, co coraz zasilono aplet. W moim przypadku wiem, że kod nigdy nie trafia na serwer WWW, a klasa jest niepodpisana, więc zawiedzie, chyba że w określonej lokalizacji przyznanej przez mój plik zasad.