3

リモート データベースにアクセスする必要がある Java クライアントがあります。データベース資格情報をユーザーから隠し、コード内に資格情報をハードコーディングしないことが目標です。したがって、データベースへのアクセスはおそらくサーバー側で行う必要があります。

データ抽象化フレームワークとして Ibatis を使用するように制限されています。それとは別に、Web サーバーで JBoss を実行しているため、データ ソースを使用できます。

リモート データベース アクセスとデータのシリアライゼーション/デシリアライゼーションをどのように設計しますか。ソケットよりもある種のデータ ストリームの Web サービスを優先しますか? 両方のどちらかをどのように認識しますか?

4

3 に答える 3

3

サービス層を構築し、RMI を介して公開します。おそらく、JBoss の EJB3 ステートレス セッション Bean として、または純粋な RMI として公開します。特別な必要がない限り、私は Web サービスを気にしません。RMI がシリアライゼーションのケースを引き受けます。

サービス層は、Swing アプリの起動時に入力された資格情報を使用してユーザーを認証する方法を公開する必要があります。データのすべての呼び出しは、サービス層を通過します。Swing アプリには SQL はありません。

この配置には、データベースの資格情報を隠すだけでなく、他にも利点があります。最終的に階層化されたアーキテクチャになるだけでなく、サーバー上に単一のデータ ソースを持つことで、すべてのクライアント間で準備済みステートメントを共有することで効率が向上します。

于 2008-10-08T09:07:12.010 に答える
0

ユーザーが資格情報を知らなくてもデータベースにアクセスできるようにしたいですか? 唯一のオプションは、サーバー側のデータベース アクセスです。残念ながら、Java でユーザー名とパスワードを隠す方法はありません。ユーザー名とパスワードをプロパティ ファイルに入れて暗号化すると、攻撃者がデバッガーをアタッチして、コードに保持されている値を確認する可能性があります。

また、安全な接続を介して DB に接続していない限り、誰かが tcpdump などのパケット スニファーを実行し、そこで資格情報を取得する可能性があります。

あなたは JBoss サーバーを実行していると言いますが、クライアント アプリケーションがデータベースに直接アクセスしないようにリモート EJB をセットアップするのが最善の方法です。EJB メソッドを介してアクセスする必要があります。(ちなみに、EJB である必要はありません。必要に応じて、Web サービスなどを行うこともできます)。

要点は、サーバーがデータベースと直接対話し、クライアントの唯一のアクセスは、サーバー上で定義した限定されたインターフェースのセットを介して行われるということです。

于 2008-10-08T08:24:56.170 に答える
0

すでに述べたように、データベース接続を処理するサーバーに接続する必要があります。30 分間の努力で、誰かがあなたのセキュリティを破るのを効果的に防ぐ方法はありません。

クライアントがイントラネット内でローカルに接続している場合は、アプリケーションサーバーで EJB を使用するのがおそらく最良の選択です...おそらくステートレスセッション Bean が必要ですが、必ずしもメッセージ駆動型 Bean を割り引くとは限りません。

トラフィックが外部から来る長距離の場合、HTTPS 経由の Web サービスを使用します。

いずれにせよ、ほとんどのアプリケーション サーバーには、WSDL を使用して、EJB を Web サービスとして公開するメカニズムがあります。また、WSDL からクライアントを生成したり、Web サービスを呼び出したりするための約 100 のユーティリティがあります (axis の wsdl2java は十分に機能します)。

于 2008-10-08T16:17:35.620 に答える