package Ġcom . authentication . app . utils . jwt Ċ Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . lang . IllegalArgumentException Ċ import Ġjavax . crypto . Mac Ċ import Ġjavax . crypto . spec . SecretKey Spec Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠJ ef ry ĠJack y Ġon Ġ 1 6 / 0 9 / 2 0 . Ċ Ġ*/ Ċ @ Service Ċ internal Ġclass ĠJ W TH S 2 5 6 : ĠJWT () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Header (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgson . toJson ( JWT Header ( SIGN ING _ AL GO , ĠJWT _ TYPE )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Signature ( encoded Header : ĠString , Ġencoded Payload : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsecret Key Ġ= Ġjwt Secret !!. toByteArray () ĊĠĠĠĠĠĠĠ Ġval Ġmac Ġ= ĠMac . getInstance (" H mac SHA 2 5 6 ") ĊĠĠĠĠĠĠĠ Ġval Ġsecret KeySpec Ġ= ĠSecret KeySpec ( secret Key , Ġ" H mac SHA 2 5 6 ") ĊĠĠĠĠĠĠĠ Ġmac . init ( secret KeySpec ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġ"$ encoded Header .$ encoded Payload " ĊĠĠĠĠĠĠĠ Ġreturn Ġmac . do Final ( data . toByteArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ToString ( jwt : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsecret Key Ġ= Ġjwt Secret !!. toByteArray () ĊĠĠĠĠĠĠĠ Ġval Ġmac Ġ= ĠMac . getInstance (" H mac SHA 2 5 6 ") ĊĠĠĠĠĠĠĠ Ġval Ġsecret KeySpec Ġ= ĠSecret KeySpec ( secret Key , Ġ" H mac SHA 2 5 6 ") ĊĠĠĠĠĠĠĠ Ġmac . init ( secret KeySpec ) ĊĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġjwt . split (".") ĊĠĠĠĠĠĠĠ Ġval Ġencoded Header Ġ= Ġsplit [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġencoded Payload Ġ= Ġsplit [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġsplit [ 2 ] ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġ"$ encoded Header .$ encoded Payload " ĊĠĠĠĠĠĠĠ Ġval Ġexpected Signature Ġ= Ġencoder . encode ToString ( mac . do Final ( data . toByteArray ())) ĊĠĠĠĠĠĠĠ Ġif ( expected Signature Ġ== Ġsignature ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString ( decoder . decode ( encoded Payload )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" invalid Ġtoken ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSIGN ING _ AL GO Ġ= Ġ" HS 2 5 6 " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠJWT _ TYPE Ġ= Ġ" JWT " ĊĠĠĠ Ġ} Ċ }