2016-08-31 56 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字段。
我会质疑你实际上试图解决什么问题,并找到更好的沙箱用户的方式。