/* Ċ Ġ* ĠCopyright Ġ 2 0 0 2 - 2 0 2 0 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠGood Data ĠCorporation Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ* ĠFork ed Ġfrom Ġhttps :// github . com / spring - projects / spring - security / blob / 5 . 4 . 0 / web / src / main / java / org / springframework / security / web / saved request / Cookie Request Cache . java Ċ Ġ*/ Ċ package Ġcom . good data . oauth 2 . server . servlet Ċ Ċ import Ġcom . good data . oauth 2 . server . common . SPR ING _ RE DIRECT _ URI Ċ import Ġorg . springframework . security . web . saved request . Request Cache Ċ import Ġorg . springframework . security . web . saved request . Saved Request Ċ import Ġorg . springframework . security . web . saved request . Simple Saved Request Ċ import Ġorg . springframework . security . web . util . Url Utils Ċ import Ġorg . springframework . security . web . util . matcher . Ant Path Request Matcher Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ import Ġjavax . servlet . http . HttpServletResponse Ċ Ċ /** Ċ Ġ* ĠAn ĠImplementation Ġof Ġ` Request Cache ` Ġwhich Ġsaves Ġthe Ġoriginal Ġrequest ĠURI Ġin Ġa Ġcookie . Ċ Ġ* Ċ Ġ* Ġ@ author ĠZe esh an ĠAd nan Ċ Ġ* Ġ@ since Ġ 5 . 4 Ċ Ġ*/ Ċ class ĠCookie Request Cache ( private Ġval Ġcookie Service : ĠCookie Service ) Ġ: ĠRequest Cache Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrequest Matcher Ġ= ĠAnt Path Request Matcher (" /** ", Ġ" GET ") ĊĊĠĠĠ Ġoverride Ġfun Ġsave Request ( request : ĠHttpServletRequest , Ġresponse : ĠHttpServletResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! request Matcher . matches ( request )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġredirect Url Ġ= ĠUrl Utils . build Request Url ( request ) ĊĠĠĠĠĠĠĠ Ġcookie Service . create Cookie ( request , Ġresponse , ĠSPR ING _ RE DIRECT _ URI , Ġredirect Url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Request ( request : ĠHttpServletRequest , Ġresponse : ĠHttpServletResponse ): ĠSaved Request ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġredirect Url Ġ= Ġcookie Service . decode Cookie ( request , ĠSPR ING _ RE DIRECT _ URI ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠSimple Saved Request ( redirect Url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Matching Request ( request : ĠHttpServletRequest , Ġresponse : ĠHttpServletResponse ): ĠHttpServletRequest ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsaved Ġ= Ġget Request ( request , Ġresponse ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! matches Saved Request ( request , Ġsaved )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġremove Request ( request , Ġresponse ) ĊĠĠĠĠĠĠĠ Ġ// Ġcached Ġrequest Ġdoes Ġcontain Ġonly Ġrequest Ġpath Ġso Ġwe Ġreturn Ġcurrent Ġrequest Ġinstead ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Request ( request : ĠHttpServletRequest , Ġresponse : ĠHttpServletResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcookie Service . invalidate Cookie ( request , Ġresponse , ĠSPR ING _ RE DIRECT _ URI ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmatches Saved Request ( request : ĠHttpServletRequest , Ġsaved Request : ĠSaved Request ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( saved Request Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Url Ġ= ĠUrl Utils . build Request Url ( request ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsaved Request . redirect Url Ġ== Ġcurrent Url ĊĠĠĠ Ġ} Ċ } Ċ