私はJava Web Projectで二要素認証を追加しています。ログインページでは、ユーザ名、パスワード、セキュリティコードを入力する必要があります(ログインページにセキュアコードが生成され始めます)。これらの3つが一致すると、メインページにアクセスできます。RequestMappingの中にメソッドを追加するSpringBoot
@RequestMapping(value = "")
public String login() throws InterruptedException, GeneralSecurityException {
getSecureCode();
return "login"; // return to login.jsp
}
public void getSecureCode() throws InterruptedException, GeneralSecurityException {
String base32Secret = TimeBasedOneTimePasswordUtil.generateBase32Secret(16);
String keyId = "abc123";
logger.info("Image url = " + TimeBasedOneTimePasswordUtil.qrImageUrl(keyId, base32Secret));
code = TimeBasedOneTimePasswordUtil.generateCurrentNumberString(base32Secret);
while (true) {
long diff = TimeBasedOneTimePasswordUtil.DEFAULT_TIME_STEP_SECONDS
- ((System.currentTimeMillis()/1000) % TimeBasedOneTimePasswordUtil.DEFAULT_TIME_STEP_SECONDS);
code = TimeBasedOneTimePasswordUtil.generateCurrentNumberString(base32Secret);
logger.info("Secret code = " + code + ", change in " + diff + " seconds");
Thread.sleep(1000);
}
}
// after button in login.jsp clicked
@RequestMapping(value = "check", method = RequestMethod.POST)
私はgetSecureCode
メソッドを追加したので、ユーザは、ログインページ内のセキュリティコードを取得することができます。残念ながら、Webページはロードされません。私はそれを削除するだけで動作します。
P/Sは:リクエストを処理し、応答を返すことになっているスレッドが無期限にはまりますので、2つの要素認証のために、私は、while
ループは決して終了しますhttps://github.com/j256/two-factor-auth
あなたの考えは根本的に間違っています。既存のコードがうまくいかない理由を尋ねるのではなく、達成したいことを具体的に説明する必要があります。 –