package Ġno . nav . f amil ie . s ik ker het Ċ Ċ import Ġno . nav . security . token . support . spring . Spring Token Validation Context Holder Ċ import Ġorg . springframework . web . filter . Once Per Request Filter Ċ import Ġjavax . servlet . FilterChain Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ import Ġjavax . servlet . http . HttpServletResponse Ċ Ċ /** Ċ Ġ* ĠFilter Ġfor ĠÃ¥ Ġvalid ere Ġtokens , Ġkan Ġset tes Ġtil ĠÃ¥ Ġkun Ġvalid ere Ġon Ġbehalf Ġof / client Ġcredential Ġeller Ġbeg ge Ċ Ġ* Ċ Ġ* Ġ@ param Ġaccept Client Credential Ġtrue / false Ċ Ġ* Ġ@ param Ġaccept On Be half Of Ġtrue / false Ċ Ġ* Ġ@ param Ġissuer Name Ġdefault Ġazure ad , Ġkan Ġover sk re ves Ġh vis Ġissuer Ġer Ġe ks Ġa ad / azure Ċ Ġ* Ġ@ param Ġlog Only Ġh vis Ġman ĠÃ ¸ n sk er ĠÃ¥ Ġkun Ġlog ge Ġresult ate t Ġmen Ġik ke Ġstop pe Ġrequest en Ċ Ġ*/ Ċ class ĠClient Token Validation Filter ( private Ġval Ġaccept Client Credential : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġaccept On Be half Of : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġissuer Name : ĠString Ġ= Ġ" azure ad ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Only : ĠBoolean Ġ= Ġfalse ) Ġ: ĠOnce Per Request Filter () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġdo Filter Internal ( request : ĠHttpServletRequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠHttpServletResponse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Chain : ĠFilter Chain ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccepted Ġ= Ġaccepted () ĊĠĠĠĠĠĠĠ Ġlog g Result at ( accepted ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( accepted Ġ|| Ġlog Only ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġfilter Chain . do Filter ( request , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġresponse . send Error ( HttpServletResponse . SC _ UN AUTHORIZ ED , Ġ" Authenticated , Ġbut Ġun authorized Ġapplication ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog g Result at ( accepted : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġme ld ing Ġ= Ġ" Val ider er Ġtoken Ġaccepted =$ accepted Ġlog Only =$ log Only " ĊĠĠĠĠĠĠĠ Ġif Ġ( log Only ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( meld ing ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug ( meld ing ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshould Not Filter ( request : ĠHttpServletRequest ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġrequest . request URI . substring ( request . context Path . length ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpath . startsWith ("/ internal /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġpath . startsWith ("/ swagger - ui /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġpath . startsWith ("/ swagger - resources ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġpath . startsWith ("/ v 2 / api - docs ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġshould Not Filter ( path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠK an Ġoverride as Ġh vis Ġman ĠÃ ¸ n sk er ĠÃ¥ Ġfil r ere Ġb ort Ġand re Ġpaths ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ", Ġ" UNUSED _ PARAMETER ") ĊĠĠĠ Ġfun Ġshould Not Filter ( path : ĠString ): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġfun Ġaccepted (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclaims Ġ= ĠSpring Token Validation Context Holder (). token Validation Context . get Claims ( issuer Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( claims Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" F inner Ġik ke Ġclaim =$ issuer Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Ġ= Ġclaims . get (" sub ") Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoid Ġ= Ġclaims . get (" oid ") Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠclientId Ġ= Ġclaims . get (" az p ") Ġas ĠString ? ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroles Ġ= Ġclaims . get (" roles ") Ġas ĠList < String >? Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccess As Application Ġ= Ġroles . contains (" access _ as _ application ") ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġer Client Credential Ġ= Ġsub Ġ!= Ġnull Ġ&& Ġsub Ġ== Ġoid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( accept Client Credential Ġ&& Ġaccess As Application ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( accept On Be half Of Ġ&& Ġ! er Client Credential ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" M ang ler Ġno e Ġi Ġtoken Ġ- Ġaccess As Application =$ access As Application ĠclientId =$ clientId Ġer Client Credential =$ er Client Credential ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Fe ilet Ġs je kk Ġav Ġaccess _ as _ application ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ