現在、私たちの Web プロジェクトでは一部のデータを匿名化する必要があります。
(たとえば、432-55-1111 のようなセキュリティ番号は、432-55- * * と表示される場合があります) これらのデータには、電子メール、ID、価格、日付などが含まれる場合があります。
マスクする必要があるテーブルの名前と列はDBに保存されました。
春のセキュリティを使用して、ユーザーがデータを見ることができるかどうかを判断しています。
データ ドメイン オブジェクト (CMP) は、SQL または JPQL (名前付きクエリまたはネイティブ クエリ) または JPA ロード メソッドまたはメインフレームから取得できます。
これらのデータを動的にマスクする最も効率的な方法(DB 側ではなく)を見つける必要があります。
EJB メソッド end でインターセプターを使用する場合、すべてのオブジェクト (DTO) とすべての列に注釈を付ける必要があります。それは効率が悪いかもしれません。
SQL が実行され、名前付きクエリ (ネイティブ クエリ) が実行されたときにメソッド (インターセプターなど) を呼び出す方法は誰でも知っています。メソッドを呼び出して、クエリとユーザー ID によって結果をマスクすることもできます。
または他の方法。
レポートなどの他のアプリケーションが別のソリューションを必要としないように、これを最下位レベルに置くことをお勧めします。
私たちのプロジェクトのアーキテクチャは JSF+Spring+EJB 3.0+JPA 1.0 です。
多くのWebプロジェクトがあります。
JPA の場合、EclipseLink 2.2 を使用するプロジェクトと、Hibernate を使用するプロジェクトがあります。
更新:
私たちのプロジェクトに関する詳細情報。さまざまな機能に関する多くの Web プロジェクトがあります。そのため、それらに関連付けられた多くの ejb プロジェクトがあります。すべての ejb には、JPQL または get(class, primarykey) メソッドを呼び出して CMP を取得するための DAO があります。以下のように:
Query query = em.createNamedQuery(XXXCMP.FIND_XXX_BY_NAME);
query.setHint(QueryHints.READ_ONLY, HintValues.TRUE);
query.setParameter("shortName", "XXX").getSingleResult();
または
XXXCMP screen = entityManager.find(XXXCMP.class, id);
CMP から DTO にデータを変換する新しい EJB サービス コード コンバーター。
以下のようなコンバータ:
/**
* Convert to CMP.
*
*/
CMP convertToCMP(DTO dto, EntityManager em);
/**
* Convert CMP to domain object with all fields populated, the default scenario is
* <code>EConvertScenario.Detail</code>.
*
*/
DTO convertFromCMP(CMP cmp, EntityManager em);
しかし、一部の古いサービスでは、CMP を変換するために独自の方法が使用されています。また、一部のドメイン サービスでは、検索の遅延処理に使用され、コンバーターも使用されていません。
CMP が DTO に変換する前に、データをマスクしたいと考えています。