ほとんどの人にとってはかなり一般的なテーマです。Spring + Spring Security + Hibernate +MySQL+などを使用してJavaでWebアプリを構築しています...
「パスワードのリセット」モジュールを実装中です。私はすでにプロセスフローを知っており、すべてのフォームと対応するコントローラーを持っています。コードを書く前に、右足から始めて、それを改善し続けるかどうかを知りたいだけです。
MySQLテーブル:
PASSWORD_CHANGE_REQUESTS (
TOKEN VARCHAR(126) NOT NULL,
USERNAME VARCHAR(50) NOT NULL,
CREATION_TIME DATETIME NOT NULL,
PRIMARY KEY(TOKEN)
)
一部の投稿でEXPIRE_DATEフィールドが推奨されていることを確認しました。それは本当に価値がありますか?
一意のトークン:
ユーザー名+タイムスタンプをパラメーターとして(+必要なソルト値)、92c303b9740da5959418c32d04b6ec6f4ca61637などの文字列を返すSpringSHAエンコーダーを使用しています。
このメソッドは本当にURLの一意のトークンを生成しますか?それともそれを行うためのより良い方法はありますか?
Javaでは、タイムスタンプは次のように生成されます。
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm:ss");
String timestamp = sdf.format(date);