2016-12-17 15 views
1

私はコンテナ・クラスを持っていますが、サーブレット・パート以外は何もありません。データ・アクセス・レイヤーは、自分のデータベースとやりとりし、クエリ・パラメータの結果を提供します。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でクラスとメソッドの呼び出し元を知るにはどうすればよいですか?それとも他の選択肢がありますか?

+0

どのメソッドが呼び出されたかを知るには、Thread.currentThread()。getStackTrace()を使用できます。それ以外の場合は、単に "validated"フィールドを入力してください –

+0

"validated" - >私はあなたに@ElMarceを取得できませんでした。 – lsof

+0

はい、ユーザーに権限があることを伝える簡単なフラグです。他の方法は、データを暗号化したままにし、データアクセス層にパスワードを渡して解読することです。 –

答えて

1

まず、これはデータアクセスレイヤIMHOとは関係ありません。これはコードアクセスセキュリティを自分で実装したいと考えているようです。私が考える限りでは、この責任はBLLまたはアプリケーションコードにあるので、 "許可され​​ていないユーザ呼び出しDALメソッド"について心配するべきではありません。同僚にコードの使い方を教えることができます。エンドユーザーは決してあなたのコードにアクセスすることはなく、彼はあなたのアプリケーションを通してのみそれと対話します。したがって、アプリケーションが正しく記述されていれば、問題は発生しません。 DataStoreImplのコンストラクタで注入するAuthorazationオブジェクト

  • し、それを検証する - :ところで

    、以下の点では、とにかくそれを必要とする場合、私の心に来ます。有効でない場合は、適切な例外をスローします。フラグ変数を使用する同様のソリューションは、コメントで "El Marce"によって既に提案されています。

  • DALでライセンスまたはロックを実装します。あなたのアプリケーションとDALを不正な使用(DAL dllを不正にコピーしてメソッドを呼び出すためのコードを書くこと)とリバースエンジニアリングから保護することは別の話題です。私はここでそれについて議論しません。
  • データベース内のデータを暗号化する(「El Marce」が提案したように)、INSERT、UPDATE、DELETEのケースを処理しないため、私には適していません。
  • クラスおよびメソッドに最小限のアクセス指定子を指定します。データアクセスレイヤーコードをBLLレイヤーに移動することができる場合は、クラスをinternal(これはC#です)とマークして、メソッドに保護を追加します。
関連する問題