Socket+Applet- problemy na localhost

0

Witam.
Mam napisanego klienta w Java, oto kod:
http://pastebin.com/m79c1a2d2
Jest on zamieszczony na tym samym serwerze, co serwer do tego klienta. Stąd:
host="localhost";
Jednak nie działa on ze względu na zabezpieczenia. Niestety nie mogę sobie z nimi poradzić. Potrzebny port(tu: 9999) jest otwarty. Pomimo tego aplet zamiast działać, to wyrzuca wyjątek:
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:9999 connect,resolve)
Dziękuję z góry za pomoc.

PS Były już podobne tematy do tego, ale nie pomogły.

0

Pomoze jak zamienisz host="localhost" na host="127.0.0.1"?

0

Niestety nie. Dodam, że jako nie-aplet działało jak powinno.
A mógłby ktoś uruchomić ten skrypt u siebie? Sprawdzić tylko, czy nie wyrzuca tego wyjątku, serwer nie jest potrzebny.

0

U mnie problem zniknął po podpisaniu apletu. Zatem w zdaniu

PS Były już podobne tematy do tego, ale nie pomogły.
mijasz się z prawdą.

0

@bogdans - problem jest taki ze aplet moze sie laczyc na serwer z ktorego pochodzi. W tym pzypadku pochodzi z localhosta, probuje sie laczyc na localhost, wiec powinno dzialac. Nie dziala dlatego ze albo nie pochodzi z localhosta a np z ip sieci lokanlej (np 192.168.1.100) albo nie probuje sie laczyc z localhost.

0

@ucilala, powinno byc tak jak mówisz. Ale uruchomiłem dzisiaj swój stary aplet, który tworzy wtyczkę tak:

new Socket(getCodeBase(),port);

jak odpowiednią usługę uruchomiłem na zdalnym serwerze i aplet ściągałem z tego serwera to poszło. Jak usługę uruchomiałem u siebie i aplet był u mnie, to obejrzałem to

java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:9999 connect,resolve)

Przynajmnie w FF, sprawdzę inne przegladarki.

0

W IE7 znany komunikat o błędzie, w Operze poszło.

0

A to ciekawe, dobrze wiedziec ze sa problemy z localhostem. Pewnie to przez podmiane localhost na 127.0.0.1 czy cos w tym stylu.
Pozdro.

0

Opera korzysta z własnej Javy, FF i IE z sunowskiej. Żeby zlikwidować komunikat o błędzie starczy w pliku %java_home%/lib/security/java.policy dodac wiersz

	permission java.net.SocketPermission "localhost:1024-", "connect";
0

Dobra, przerzuciłem na sieć lokalną. Nadałem IP lokalny(192.168..) zamiast localhost czy 127.0.0.1 i działa. Dziwne, że wyłącznie na swojej maszynie to nie można, wszak wtedy nawet mniej zabezpieczeń jest(zapora nie przeszkadza). Moim zdaniem jakieś niedostatki w implementacji java.net.*.
Dzięki za pomoc!

0

Przecież napisałem co trzeba zrobić, żeby działało na "localhost". Niedostatek jest (chyba) w domyslnym pliku java.policy.

0

To co napisales to jest workaround. Jak mowi specyfikacja aplet powinien moc sie laczyc z serwerem zktorego pochodzi bez zadnych plikow policy czy podpisywania.

0

Nie znalazłem w specyfikacji informacji, że aplet bezwarunkowo może utworzyć Socket łączący się z serwerem, z którego pochodzi.

0

Nie chce mi sie szukac w specyfikacji ale masz tutaj:
http://java.sun.com/docs/books/tutorial/deployment/applet/security_practical.html

0

Dzięki. Jest mały niuans, ten tutorial mówi czego apletowi nie wolno. Czy w stosunku do apletów obowiązuje zasada co nie jest zabronione, jest dozwolone?
</quote>

0

Jezu czlowieku jakie masz problemy. Post juz dawno powinien zniknac ze stony glownej ale sie ciagle klocisz.
Jesli chcesz sie bawic to ok:
"An applet cannot make network connections except to the host that it came from." (cytat z tutka Suna)
jak dla mnie jest rownoznaczne:
An applet is allowed to make connections to the host that it came from, and no other. (moja interpretacja)
Przetlumacze moze:
Apletowi wolno wykonywac polaczenia do hosta z ktorego pochodzi, ale zadnego innego.

Ale dobra, wygrales.

0

Sorry, szukałem dziury w całym (a raczej całego w dziurze). To jest usterka Suna.

0

Sarkazm ;-) ?

Swoja droga, pisanie w aplecie zeby sie laczyl z localhostem jest zazwyczaj bez sensu - apliet jest ladowany na kompiuterze klienta, i ma sie laczyc z serwerem, i gdy jest proba polaczenia z localhostem to probuje sie polaczyc z komputerem klienta - zonk.
Jak wspomnial Bogdans, powinno sie uzywac Applet.getCodeBase() do polaczen z socketami, nie bedzie problemow.
Pozdro!

0

To nie był sarkazm, tylko szczere przyznanie się do błędu. Przy okazji poprawię błąd, winno być

...new Socket(getCodeBase().getHost(),port);

Powyższe działa w Operze, w IE i FF bez ingerencji w plik java.policy nie działa dla "localhosta".

1 użytkowników online, w tym zalogowanych: 0, gości: 1