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

时间:2016-12-17 15:01:29

标签: java servlets authorization containers data-access-layer

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

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

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

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

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

现在我最糟糕的噩梦是,如果有人在未经授权的情况下在我的数据库中读/写数据,因为我的数据访问层中的所有类和方法都是“公共的”。我怎么能克服这个?

即,如何确保某人在授权后通过数据访问层访问我的类和方法?

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

1 个答案:

答案 0 :(得分:1)

首先,这与数据访问层恕我直言无关。这看起来您希望自己实现代码访问安全性。我认为,你不应该担心"未经授权的用户呼叫DAL方法"因为这个责任在于BLL或应用程序代码。您可以培训您的同事如何使用您的代码。最终用户永远不会访问您的代码,他只会通过您的应用程序与其进行交互。因此,如果正确编写应用程序,则永远不会发生问题。

顺便说一下,如果你还需要它,我会想到以下几点: -

  • Authorazation的构造函数中注入DataStoreImpl对象并验证它。如果无效,请抛出适当的异常。使用标志变量的类似解决方案已由" El Marce"在评论中。
  • 在您的DAL上实施许可或锁定。保护您的应用程序和DAL免受非真实使用(某人非真实地复制您的DAL dll并编写自己的代码来调用方法)和逆向工程是另一个主题;我不会在这里讨论它。
  • 加密数据库中的数据(再次按照" El Marce"的建议)看起来不适合我,因为它不会处理INSERT,UPDATE,DELETE案例。
  • 在类和方法上放置最小访问说明符。如果您可以将数据访问层代码移动到BLL图层,则可以将类标记为internal(这是C#。不确定它在Java中的等效内容)将为您添加保护方法。