2016-08-31 59 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()',然後在共享受限制的對象時,它會執行'返回新的NonModifiableRestrictedObject(obj);''NonModifiableRestrictedObject'是一個包裝器,它禁止除限制對象之外的所有方法方法。 – aioobe

回答

2

試圖在用戶可以執行任意Java代碼的系統中實施訪問控制是一個糟糕的主意。
它基本上是Java小程序背後的想法,它一再顯示它很難正確。
您需要確保訪問該對象的用戶不能使用像反射這樣的技巧來讀取UUID字段。
我會質疑你實際上試圖解決什麼問題,並找到更好的沙箱用戶的方式。