Fehler beim Aufbau einer Socket Verbindung



  • Hallo Forum,

    Prohrammiere grade in Java Sockets, doch irgendwie krieg ich immer nur folgende Fehler Meldung

    java.security.AccessControlException: access denied (java.net.SocketPermission pop.web.de:25 connect,resolve)
    
    	at java.security.AccessControlContext.checkPermission(Unknown Source)
    
    	at java.security.AccessController.checkPermission(Unknown Source)
    
    	at java.lang.SecurityManager.checkPermission(Unknown Source)
    
    	at java.lang.SecurityManager.checkConnect(Unknown Source)
    
    	at java.net.Socket.connect(Unknown Source)
    
    	at java.net.Socket.connect(Unknown Source)
    
    	at java.net.Socket.<init>(Unknown Source)
    
    	at java.net.Socket.<init>(Unknown Source)
    
    	at client.connecting(client.java:16)
    
    	at client.paint(client.java:9)
    
    	at sun.awt.RepaintArea.paint(Unknown Source)
    
    	at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
    
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    
    	at java.awt.Component.dispatchEvent(Unknown Source)
    
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    
    	at java.awt.EventDispatchThread.run(Unknown Source)
    

    Was mach ich falsch?

    Code Ausschnitt:

    public void connecting() {
      try{
        Socket client = new Socket("pop.web.de", 25);
        BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        PrintWriter aus = new PrintWriter(client.getOutputStream() );
    
        aus.println("HALLO");
      }
       catch (UnknownHostException e) {
         setBackground(Color.red);
         repaint();
       }
    }
    

    Danke...



  • Arbeites du mit Linux?
    Wenn ja mal deine Rechte checken, oder als root probieren!



  • nein kein linux, w2k



  • Ist das ein Applet?



  • jab ist ein applet.



  • Mit einem Applet eine Socketverbindung aufzubauen geht so ohne weiteres nicht. Applets laufen in einer strikten Sandbox. Der AccessManager hat sich ja auch deshalb gemeldet. Du müsstest ein Policy-File erzeugen das folgenden aufbau hat

    grant {
    permission java.net.SocketPermission "pop.web.de:25", "connect,accept,resolve";
    }
    


  • Oha, ich muss ein "WAS"??? erzeugen???.
    Wie geht das?

    Also ich bin nich grad nen crack in Java :-).

    MFG Illu



  • Also:
    Java Programme insbesondere Applets haben null Zugriff auf Systemresourcen (Dateisystem, Sockets etc.). Deswegen bekommst du auch beim Aufruf deines Programmes ständig SecurityExceptions an den Kopf geschmissen weil der AccessManager gewisse Aktionen (per se alle) verbietet. Nun gibt es aber Möglichkeiten die Verbote abzuschwächen indem man sogenannte Policy-Files erzeugt. Hier wird festgelegt, was gewisse Applikationen dürfen (immer positiv denn implizit ist alles verboten). Ein Policy-File zu erzeugen ist relativ simpel und kann mit einem Texteditor deiner Wahl erstellt werden. Einfach die Zeilen oben in ein File gepackt und die VM mit den entsprechenden Parametern aufrufen - fertig. Natürlich gibts da noch das eine oder andere dazwischen zu beachten aber das würde hier den Rahmen sprengen. Deswegen finde ich es besser dich an die Leute zu verweisen die dafür verantwortlich sind 🙂

    Frequently Asked Questions - Java Security


Anmelden zum Antworten