【问题标题】:Unique id to restrict access to methods用于限制对方法的访问的唯一 ID
【发布时间】:2016-08-31 10:19:55
【问题描述】:

我有一个对象,我想限制对其某些方法的访问,以便只有对象的创建者可以访问它们:

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

这是一个好的做法还是一个糟糕的主意?

【问题讨论】:

  • 一个(可能更好的)替代方案是只共享对象的不可变视图。例如,创建者会执行obj = new RestrictedObject(),然后,当共享受限对象时,它会执行return new NonModifiableRestrictedObject(obj);,而NonModifiableRestrictedObject 是一个不允许除受限方法之外的所有方法的包装器。

标签: java uuid access-modifiers


【解决方案1】:

试图在用户可以执行任意 Java 代码的系统中实施访问控制是一个糟糕的主意。
这基本上是 Java 小程序背后的想法,它已经一次又一次地表明很难做到正确。
您需要确保有权访问对象的用户不能使用反射等技巧来读取 UUID 字段。
我会质疑您实际上要解决什么问题,并找到一种更好的沙盒用户方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 2011-05-09
    • 2011-07-25
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    相关资源
    最近更新 更多