package Ġio . github . recipe store . service . security Ċ Ċ import Ġio . github . recipe store . util . TOKEN _ PREFIX Ċ import Ġorg . springframework . http . HttpHeaders Ċ import Ġorg . springframework . security . authentication . Reactive Authentication Manager Ċ import Ġorg . springframework . security . authentication . Username Password Authentication Token Ċ import Ġorg . springframework . security . core . Authentication Ċ import Ġorg . springframework . security . core . context . SecurityContext Ċ import Ġorg . springframework . security . core . context . SecurityContext Impl Ċ import Ġorg . springframework . security . web . server . context . Server SecurityContext Repository Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . web . server . Server Web Exchange Ċ import Ġreactor . core . publisher . Mono ĊĊ Ċ @ Service Ċ class ĠSecurity Context Repository Impl ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġauthentication Manager : ĠReactive Authentication Manager Ċ ) Ġ: ĠServer SecurityContext Repository Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġsave ( exchange : ĠServer Web Exchange , Ġcontext : ĠSecurity Context ): ĠMono < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Save Ġmethod Ġnot Ġsupported ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload ( exchange : ĠServer Web Exchange ): ĠMono < SecurityContext > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Header Ġ= Ġexchange . request ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. headers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getFirst ( HttpHeaders . AUTHORIZATION ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( auth Header Ġ!= Ġnull Ġ&& Ġauth Header . startsWith ( TOKEN _ PREFIX )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauth Token Ġ= Ġauth Header . substring ( TOKEN _ PREFIX . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauth Ġ= ĠUsername Password Authentication Token ( auth Token , Ġauth Token ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthentication Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. authenticate ( auth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġauthentication : ĠAuthentication ? Ġ-> ĠSecurity Context Impl ( authentication ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMono . empty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }