2016-08-31 4 views
0

メソッドへのアクセスを制限すると、オブジェクトの作成者だけがアクセスできるように、私は、そのメソッドの一部へのアクセスを制限したい:固有のIDは、私は、オブジェクトを持っている

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; 
     } 
    } 
} 

オブジェクトの作成者は、これを行うだろう:

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

これは良い練習かひどい考えですか?

+0

代替案は、オブジェクトの不変なビューのみを共有することです。例えば、作成者は 'obj = new RestrictedObject()'を実行し、制限されたオブジェクトを共有するときには 'new NonModifiableRestrictedObject(obj);を返します;' NonModifiableRestrictedObject'は制限付きオブジェクトを除くすべてのメソッドを許可しないラッパーです方法。 – aioobe

答えて

2

ユーザーが任意のJavaコードを実行できるシステムでアクセス制御を実施しようとするのはひどい考えです。
基本的にはJavaアプレットの背後にあるアイデアですが、正しく理解することは非常に難しいことが何度も繰り返し示されています。
オブジェクトへのアクセス権を持つユーザーは、リフレクションのようなトリックを使用してUUIDフィールドを読み取ることができないようにする必要があります。
私はあなたが実際に解決しようとしている問題を尋ね、ユーザーをサンドボックス化するより良い方法を見つけるでしょう。

関連する問題