2017-09-14 8 views
1

私は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

+1

あなたの考えは根本的に間違っています。既存のコードがうまくいかない理由を尋ねるのではなく、達成したいことを具体的に説明する必要があります。 –

答えて

0

を参照してください。

+0

解決する考えはありますか? –

+0

whileループで達成しようとしていることを正確には述べていません。 X秒ごとにコードを変更する場合は、これよりもはるかに複雑です。 –

+0

はい、コードはx秒ごとに変更されます。 –

関連する問題