如何知道我的 类 和 java 中的方法的调用者?

How to know the invoker of my classes and methods in java?

我有一个容器 class,只有 servlet 部分,数据访问层是与我的数据库交互并为查询参数提供结果的层。

我有我的数据访问层 classes 和方法 public 这样任何人都可以读取存储在数据库中的内容,相信只有合适的人才能访问它。

通常read/write 到数据库发生在验证完成后(即授权完成)。用户对数据的这种授权是在我的容器层(比如 servlet)中执行的,之后我开始 read/write 数据到我的数据库。

听起来太理论化了吧?这是我的数据访问层的示例片段:

DataStore.java

//This is my interface

public interface DataStore {

public String[] selectData(query params) throws Exception;

public String[] addData(query params) throws Exception;

public String[] editData(query params) throws Exception;

public String[] deleteData(query params) throws Exception;

}

DataStoreImpl.java

//This is my implemetation part of my above interface

public class DataStoreImpl implements DataStore {

    public String[] selectData(query params) throws Exception {

          //Code implementing select query logic
    }

    public String[] addData(query params) throws Exception {

          //Code implementing insert query logic
    }

    public String[] editData(query params) throws Exception {

          //Code implementing update query logic
    }

    public String[] deleteData(query params) throws Exception {

         //Code implementing delete query logic
    }
}

现在我最糟糕的噩梦是,如果有人 read/write 在我的数据库中未经授权的数据怎么办,因为我的数据访问层中的所有 classes 和方法都是 "public"。我该如何克服这个问题?

也就是说,我如何确保有人在授权后通过数据访问层访问我的 classes 和方法?

如何知道 DataStore 或 DataStoreImpl 中 classes 和方法的调用者?或者还有其他选择吗?

首先,恕我直言,这看起来与数据访问层没有任何关系。这看起来你想自己实现代码访问安全。就我而言,你不应该担心 "un-authorized user calling DAL method" 因为这个责任在于 BLL 或应用程序代码。您可以培训您的同事如何使用您的代码。最终用户永远不会访问您的代码,他只会通过您的应用程序与之交互。因此,如果应用程序编写正确,则永远不会出现问题。

顺便说一句,如果您需要的话,我会想到以下几点:-

  • DataStoreImpl 的构造函数中注入 Authorazation 对象并验证它。如果无效,则抛出适当的异常。 "El Marce" 在评论中已经提出了使用标志变量的类似解决方案。
  • 在您的 DAL 上实施许可或锁定。保护您的应用程序和 DAL 免遭未经授权的使用(有人未经授权复制您的 DAL dll 并编写自己的代码来调用方法)和逆向工程是另一个主题;这里就不讨论了。
  • 在数据库中加密您的数据(再次由 "El Marce" 提议)对我来说不合适,因为它不会处理插入、更新、删除的情况。
  • 在 类 和方法上放置最小访问说明符。如果您可以将数据访问层代码移动到您的 BLL 层,您可以将 类 标记为 internal(这是 C#。不确定它在 Java 中的等价物是什么)这将增加对您的保护方法。