1

私は Struts 2 を使用しています。私の問題は、機密データを取得したため、すべてのオブジェクト プロパティを更新したくないということです。

これが私のコード例です

public class person {
  private name;
  private email;
  private password;
}

たとえば、私のフォームでは、更新のために名前と電子メールを表示するため、送信後に個人のプロパティを更新すると、個人のパスワード プロパティの値は null になりますが<s:hidden>、更新フォームのタグにプロパティのパスワードを入れると、正常に動作します。

フォームで隠しタグを使用せずに Struts 2 にパスワードの値を記憶させるにはどうすればよいですか?

4

2 に答える 2

1

その情報を保存する必要がある場合

  • リクエスト間で永続的でなければなりません。
  • ページに表示してはなりません。

次に、実装して Session を使用するSessionAware必要があります。


とはいえ、ユーザーのパスワードを保存したり、パスワードをユーザーに関連付けたりする必要があるかどうかはわかりません。

Webアプリケーションでログインページを作成し、そのアクションでのみパスワードを処理し、データベース(またはその他のもの)に対してパスワードを検証し、パスワード自体ではなくセッションに認証IDを保存する必要があります(ユーザーを検証しません)繰り返しますが、セッションが期限切れにならない限り、ユーザーはログイン ページにリダイレクトされます...パスワードをメモリに保持する必要はありません)。


とはいえ、ユーザー認証のベスト プラクティスでは、入力したパスワードをデータベースに保存されているパスワードと比較して検証することは推奨されていません。

パスワードをハッシュするには、一方向ハッシュ アルゴリズム( s 攻撃を防ぐためにソルトを追加するRainbow Table) を使用し、データベース上のハッシュされたパスワードと照合する必要があります。このようにして、データベース管理者でさえユーザーのパスワードを知ることができず、パスワードを忘れた場合、パスワードは取得されずにリセットされます。

Java での最良の実装の 1 つは、BCryptに基づくjBCryptです。

それが役立つことを願っています...


編集

Web アプリケーションで処理するオブジェクトを概念的に分離する方法として、2 つの異なる Bean を使用できます。すべてのプロパティを含む読み取り用の「フル Bean」と、書き込み可能なプロパティのみを含む書き込み用の「サブセット Bean」です。変化する。

たとえば、ID とパスワードは変更しないでください...データベースから「フル」を読み取り、JSP に書き込み、次に「サブセット」をデータベースに書き込むことができます (ただし、ユーザー登録ではフルを書き込みます)。 ..

わかりやすくするために、フル Bean はDaoデータベース フィールドを正確にマッピングするオブジェクトであり、サブセット Bean はPresentation、Dao オブジェクトから必要な属性のみをコピーして作成するオブジェクトです...どちらも DTO ですが、 2 つの異なるレベルのセマンティックを使用します。

それ以外の場合は、Bean をセッションに入れるだけです。これは 1 行のコードであり、問​​題ありません。

于 2013-02-04T09:20:38.150 に答える
0

サーバー側で「null」(または一意の値)の値を確認できます(nullの場合、変更はありません)。または、このクラスを更新リクエストに使用できます

Public class person
{

  protected name;
  protected email;
}
Public class personNew: person // inherit from person
{
    private password;
}

「Struts2」は使用していませんが、Webアプリ(APS.NET C#)では使用しています。私はこの道を進みます

于 2013-02-04T02:25:50.260 に答える