2016-08-31 4 views
0

ich ein Objekt haben, und ich möchte den Zugriff auf einige seiner Methoden beschränken, so dass nur der Schöpfer des Objekts kann auf sie zugreifen:Eindeutige ID Zugriff auf Methoden zu beschränken

class RestrictedObject { 

    private final UUID id; 

    public RestrictedObject(UUID id) { 
     this.id = id; 
    } 

    public boolean restrictedMethod(UUID anId) { 
     if (anId.equals(this.id)) { 
      //do stuff 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 

des Schöpfers Objekt würde dies tun :

UUID id = UUID.randomUUID(); 
RestrictedObject o = new RestrictedObject(id); 
o.restrictedMethod(id); 

Wäre das gute Praxis oder eine schreckliche Idee?

+0

Eine (möglicherweise bessere) Alternative wäre, nur unveränderliche Ansichten des Objekts zu teilen. Zum Beispiel würde der Ersteller "obj = new RestrictedObject()" tun und dann, wenn er das eingeschränkte Objekt teilt, "newModifyableRestrictedObject (obj)" zurückgeben, wobei "NonModiableRestrictedObject" ein Wrapper ist, der alle Methoden außer dem restricted nicht zulässt Methode. – aioobe

Antwort

2

Der Versuch, die Zugriffskontrolle in einem System zu erzwingen, in dem Ihr Benutzer beliebigen Java-Code ausführen kann, ist eine schreckliche Idee.
Es ist im Grunde die Idee hinter Java-Applets, es wurde immer wieder gezeigt, dass es sehr schwierig ist, richtig zu machen.
Sie müssen sicherstellen, dass der Benutzer mit Zugriff auf das Objekt keine Tricks wie Reflektion verwenden kann, um das UUID-Feld zu lesen.
Ich würde fragen, welches Problem Sie eigentlich versuchen zu lösen und einen besseren Weg zum Sandboxing des Benutzers finden.

Verwandte Themen