2017-08-24 47 views
0

私は高ユーザトラフィック用にspring mvcを使用してアプリケーションを開発しました。同時ユーザーが20,000人以上あるとします。私は春のセキュリティカスタム認証プロバイダを2つの方法で実装しました。
第一1は次のようになります。スプリングセキュリティ:カスタム認証プロバイダ

@Override 
public Authentication authenticate(Authentication authentication) 
throws AuthenticationException { 

    String username = authentication.getName(); 
    String password = authentication.getCredentials().toString(); 
    CustomUser user = _userDetailService.loadUserByUsername(username); 
    if (user == null || !user.getUsername().equalsIgnoreCase(username)) { 
     throw new BadCredentialsException("Username not found."); 
    } 
    if (!BCrypt.checkpw(password, user.getPassword())) { 
     throw new BadCredentialsException("Wrong password."); 
    } 
    Collection < ? extends GrantedAuthority > authorities = user.getAuthorities(); 
    return new UsernamePasswordAuthenticationToken(user, password, authorities); 
} 

第二1は次のようになります。

@Override 
public Authentication authenticate(Authentication authentication) 
throws AuthenticationException { 
    try { 
    Authentication auth = super.authenticate(authentication); 
    //if reach here, means login success, else an exception will be thrown 
    //reset the user_attempts 
    return auth; 

    } catch (BadCredentialsException e) { 
    //invalid login, update to user_attempts 
    throw e; 
    } 
} 

実装は私に速く出力が得られますwhice今私の質問はありますか?

+0

Springはすでに第1版で実装したのと同じことを(DaoAuthenticationProviderで)実行しています。したがって、customAuthenticationプロバイダは必要ありません。 – Afridi

+0

ログイン中にさらに条件を確認する必要があります。しかし、DaoAuthenticationProviderには特定の条件があります。それは私がカスタム認証プロバイダを実装する必要がある理由です。 @Afridi –

+0

最も速い? 20000回の反復でテストを実行すると、あなたが表示されます。 – holmis83

答えて

1

Afridiが既に指摘しているように、第1版はDaoAuthenticationProviderが行うべきものです。新しいセキュリティ関連のエラーを導入するなど、その機能を再実装することを強くお勧めします。

カスタム認証方式が本当に必要な場合は、もちろんカスタム認証方式を回避する方法はありません。この実装のパフォーマンスを一般的に測定するか、標準的な実装と比較するには、単にテストシナリオを定義してください(たとえば、homlis83のように20000ダミーの認証が必要です)。プロファイラでプログラムを実行してください。これは、どのくらいの時間があなたの認証方法に費やされ、どの部分が最も時間を費やすかを正確に表します。

私は最も普及しているJavaプロファイラはVisualVMだと思います。あなたのIDEによっては、その使用をさらに単純化するプラグインがあるかもしれません。そこにはJavaプロファイリングのチュートリアルもたくさんありますが、これは確実にパフォーマンスのための信頼できるデータを得るための方法です。

+0

お返事ありがとうございます。アプリケーションでは、アカウントの無効化のためのいくつかの条件があり、条件に応じて差分メッセージを表示する必要があります。それではどうしたらいいですか? –

+0

あなたの問題は、認証の自動化されたパフォーマンステストを書くことですか? – stefanhgm

関連する問題