package Ġat . rech ner her z . example . config . auth Ċ Ċ import Ġat . rech ner her z . example . domain . account . Account Ċ import Ġat . rech ner her z . example . domain . account . Account Repository Ċ import Ġorg . springframework . context . Application Listener Ċ import Ġorg . springframework . security . authentication . Username Password Authentication Token Ċ import Ġorg . springframework . security . authentication . event . Authentication Success Event Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ import Ġjava . time . Instant Ċ Ċ /** Ċ Ġ* ĠAfter Ġsuccessful Ġauthentication Ġwith Ġa Ġ[ Username Password Authentication Token ], Ċ Ġ* Ġset Ġ[ Account . second To Last Login ] Ġand Ġ[ Account . last Login ] Ġand Ġclear Ġfailed Ġlogin Ġattempts Ġin Ġthe Ġ[ Login Attempt Service ]. Ċ Ġ*/ Ċ @ Component Ċ class ĠAuthentication Success Listener ( ĊĠĠĠ Ġprivate Ġval Ġaccount Repository : ĠAccount Repository , ĊĠĠĠ Ġprivate Ġval Ġlogin Attempt Service : ĠLogin Attempt Service Ċ ) Ġ: ĠApplication Listener < Authentication Success Event > Ġ{ ĊĊĠĠĠ Ġ@ Transactional ( readOnly Ġ= Ġfalse ) ĊĠĠĠ Ġoverride Ġfun Ġon Application Event ( event : ĠAuthentication Success Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event . source Ġis ĠUsername Password Authentication Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount : ĠAccount ? Ġ= Ġaccount Repository . findBy Authentication ( event . authentication ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . second To Last Login Ġ= Ġaccount . last Login ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount . last Login Ġ= ĠInstant . now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Repository . internal Save ( account ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġip : ĠString Ġ= Ġevent . authentication . remote Address () Ġ?: Ġ"[ unknown ]" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusername : ĠString Ġ= Ġevent . authentication . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Attempt Service . login Succeeded ( ip , Ġusername ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ