私はコンテナ・クラスを持っていますが、サーブレット・パート以外は何もありません。データ・アクセス・レイヤーは、自分のデータベースとやりとりし、クエリ・パラメータの結果を提供します。Javaのクラスとメソッドの呼び出し元を知るには?
私は自分のデータアクセス層のクラスとメソッドを公開しているので、誰かが適切な人だけがアクセスするという信念でデータベースに格納されたコンテンツを読むことができます。
通常、データベースに対する読み取り/書き込みは、検証が完了した後(つまり、認証が完了した後)に行われます。データに対するこのユーザーの承認は、私のコンテナー・レイヤー(たとえばサーブレット)で実行され、その後、データベースへの読み取り/書き込みデータを開始します。
理論があまりにも聞こえますか?ここに私のデータアクセス層の私のサンプルスニペットです:
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
}
}
今私の最悪の悪夢がある、誰かが何を読めば/私のデータアクセス層のすべてのクラスとメソッドは "public"なので、私のデータベースにはデータを無許可で書き込むことができます。どうすればこれを克服できますか?
つまり、承認後、データアクセスレイヤーよりもクラスとメソッドにアクセスする人がいることを確認するにはどうすればよいですか?
DataStoreまたはDataStoreImplでクラスとメソッドの呼び出し元を知るにはどうすればよいですか?それとも他の選択肢がありますか?
どのメソッドが呼び出されたかを知るには、Thread.currentThread()。getStackTrace()を使用できます。それ以外の場合は、単に "validated"フィールドを入力してください –
"validated" - >私はあなたに@ElMarceを取得できませんでした。 – lsof
はい、ユーザーに権限があることを伝える簡単なフラグです。他の方法は、データを暗号化したままにし、データアクセス層にパスワードを渡して解読することです。 –