私は、ストライプと春を使用してWebアプリケーションを構築しています。ログイン/認証機能が必要です。今は、ユーザー資格情報とは別のユーザー情報をデータベースに格納しています。私の貴重なパスワードを渡したくないので、ユーザーモデルには資格情報が含まれていません。春と縞のセキュリティの設計
春は私のすべてのDAOを管理します。
ここでは、非コンテナベースのセキュリティシステムを実装しています。私は、パスワードのsha-2ハッシュを保存し、データベースに格納されているものに対してフォームで送信されたパスワードの比較を実行します。この比較はテストされ、機能しています。私はこの事を一緒に結ぶ方法を理解しようとしています。今私はLoginActionBeanを持ってログイン要求をキャッチし、内部でUserDAOを使用して資格を取得し、提出されたパラメータとの比較を実行する "PasswordService"シングルトンを使用します。私の春の豆は、次のとおりです。
<bean id="passwordSerivce" class="com.example.store.authentication.PasswordService" factory-method="getInstance">
<property name="userDAO" ref="userDAO"/>
</bean>
しかし、それは、その後PasswordServiceシングルトンが必要です。本当に(UserDAOがインターフェイスである)シングルトンでは意味をなしません
public void setUserDAO(UserDAO userDAO) { ...}
方法。
私は適切なデザインを探しています。私はServiceLocatorsがSpringが発明された理由だと読んだ。何かご意見は?
他にどのように私がこれを設計できるか知りたいと思います。ユーザーが「ログイン」をクリックしたときに呼び出されるActionBeanがありますが、実際にどのように認証するのですか。認証サービスをBeanに注入しますか?私は誰でも呼ぶことができるシングルトンを作りますか?私は、Springが注入するLoginAcionBeanが使用する汎用インターフェースを持っていますか?私が春を使っていなかったら、どうしたらいいのですか?
私はこれについてはっきりしているかどうかは分かりませんが、シングルトンのものは必要ありません。春はあなたのためにすべてをします。あなたはちょうどあなたの春の豆を設定し、それらはすべて効果的にシングルトンになります。非シングルトンBeanを作成するには、春を取得するために余分な回転を行わなければなりません。 – lumpynose
私はそれが正しいとは思わない理由は、シングルトンクラスには "setUserDAO"メソッドがあるからです。これは、誰かがサービスを使用することによって設定できます。つまり、誰かが技術的にそれを無効にできるということです。 誰かを「認証する」正しい方法がOODの観点からだと思います。 – djunforgetable
誰もがセッターに電話することができる問題について私は同意します。 Gandalfのコンストラクタの答えは、私がそれについて心配しているときに使うものです。また、セッターをプライベートにすることもできますし、アノテーション(@Autowired)を使用すると、スプリングはまだセッターを使用できます。それについて肯定的ではない。それは私の意見では本当にスケッチに見えます。 – lumpynose