package Ġcn . tsv ico . common . shiro . credential Ċ Ċ import Ġcn . tsv ico . common . shiro . Sh iro Action Properties Ċ import Ġcn . tsv ico . common . util . IP Utils Ċ import Ġorg . apache . shiro . auth c .* Ċ import Ġorg . apache . shiro . auth c . credential . Has hed Credentials Matcher Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . data . redis . core . Redis Template Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġjavax . annotation . Resource Ċ Ċ /** Ċ Ġ* ĠMD 5 Ġ å¯Ĩçłģ åĮ¹éħį åĻ¨ Ċ Ġ* Ċ Ġ* Ġ å¯Ĩçłģ æł¡éªĮ å¤±è´¥ åĲİ è®¡ æķ° , Ġå½ĵ è¶ħ åĩº Ġ${ shiro - action . retry - count } Ġæ ¬ ¡ åĲİ , Ġ ç¦ģ æŃ¢ çĻ»å½ķ Ġ${ shiro - action . retry - timeout } Ġ ç§Ĵ . Ċ Ġ*/ Ċ class ĠRetry Limit Has hed Credentials Matcher ( hash Algorithm Name : ĠString ?) Ġ: ĠHas hed Credentials Matcher ( hash Algorithm Name ) Ġ{ ĊĠĠĠ Ġ@ Resource ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġredis Template : ĠRedis Template < String , ĠAtomicInteger > ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsh iro Action Properties : ĠSh iro Action Properties ĊĠĠĠ Ġoverride Ġfun Ġdo Credentials Match ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠAuthentication Token , ĊĠĠĠĠĠĠĠ Ġinfo : ĠAuthentication Info ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġops ForValue Ġ= Ġredis Template . ops ForValue () ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġtoken . principal Ġas ĠString ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġusername Ġ+ ĠIP Utils . ip Addr ĊĊĠĠĠĠĠĠĠ Ġ// Ġ è¶ħ çº§ ç®¡çĲĨåĳĺ ä¸į è¿Ľè¡Į çĻ»å½ķ æ¬¡æķ° æł¡éªĮ . ĊĠĠĠĠĠĠĠ Ġif Ġ( shiro Action Properties . super Admin Username Ġ!= Ġkey ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġretry Count Ġ= Ġops ForValue [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( retry Count Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretry Count Ġ= ĠAtomicInteger ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( retry Count . increment AndGet () Ġ> Ġsh iro Action Properties . retry Count Ġ?: Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠEx cess ive Attempts Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġretry Timeout Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shiro Action Properties . retry Timeout Ġ== Ġnull ) Ġ 3 0 0 Ġelse Ġsh iro Action Properties . retry Timeout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġops ForValue [ key , Ġretry Count , Ġretry Timeout !!. to Long ()] Ġ= ĠTimeUnit . SECONDS ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmatches Ġ= Ġsuper . do Credentials Match ( token , Ġinfo ) ĊĠĠĠĠĠĠĠ Ġif Ġ( matches ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġredis Template . delete ( key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmatches ĊĠĠĠ Ġ} Ċ }