/* Ċ Ġ* ĠCopyright Ġ 2 0 0 2 - 2 0 2 0 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġorg . springframework . security . config . web . server Ċ Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . context . ApplicationContext Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . security . config . annotation . web . reactive . Enable Web Flux Security Ċ import Ġorg . springframework . security . core . user details . Map Reactive UserDetails Service Ċ import Ġorg . springframework . security . core . user details . User Ċ import Ġorg . springframework . security . config . test . Spring Test Rule Ċ import Ġorg . springframework . security . web . server . Security Web FilterChain Ċ import Ġorg . springframework . test . web . reactive . server . Web Test Client Ċ import Ġorg . springframework . web . bind . annotation . RequestMapping Ċ import Ġorg . springframework . web . bind . annotation . RestController Ċ import Ġorg . springframework . web . reactive . config . Enable Web Flux Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠTests Ġfor Ġ[ Authorize Exchange Dsl ] Ċ Ġ* Ċ Ġ* Ġ@ author ĠE le f ther ia ĠSte in Ċ Ġ*/ Ċ class ĠAuthor ize Exchange Dsl Tests Ġ{ ĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġspring Ġ= ĠSpring Test Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclient : ĠWeb Test Client ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġfun Ġsetup ( context : ĠApplication Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . client Ġ= ĠWeb Test Client ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind To ApplicationContext ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure Client () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` request Ġwhen Ġsec ured Ġby Ġmatcher Ġthen Ġrespon ds Ġwith Ġun authorized `() Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . spring . register ( Matcher Authenticated Config :: class . java ). aut ow ire () ĊĊĠĠĠĠĠĠĠ Ġthis . client . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ("/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. exchange () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Status (). is Unauthorized ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Enable Web Flux Security ĊĠĠĠ Ġ@ Enable Web Flux ĊĠĠĠ Ġopen Ġclass ĠMatcher Authenticated Config Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġspring Web FilterChain ( http : ĠServer Http Security ): ĠSecurity Web FilterChain Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhttp Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthorize Exchange Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthorize ( any Exchange , Ġauthenticated ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` request Ġwhen Ġallowed Ġby Ġmatcher Ġthen Ġrespon ds Ġwith Ġok `() Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . spring . register ( Matcher Permit All Config :: class . java ). aut ow ire () ĊĊĠĠĠĠĠĠĠ Ġthis . client . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ("/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. exchange () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Status (). is Ok ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Enable Web Flux Security ĊĠĠĠ Ġ@ Enable Web Flux ĊĠĠĠ Ġopen Ġclass ĠMatcher Permit All Config Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġspring Web FilterChain ( http : ĠServer Http Security ): ĠSecurity Web FilterChain Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhttp Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthorize Exchange Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthorize ( any Exchange , Ġpermit All ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ RestController ĊĠĠĠĠĠĠĠ Ġinternal Ġclass ĠPath Controller Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ RequestMapping ("/") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġpath () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` request Ġwhen Ġsec ured Ġby Ġpattern Ġthen Ġrespon ds Ġwith Ġun authorized `() Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . spring . register ( Pattern Authenticated Config :: class . java ). aut ow ire () ĊĊĠĠĠĠĠĠĠ Ġthis . client . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ("/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. exchange () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Status (). is Unauthorized ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` request Ġwhen Ġallowed Ġby Ġpattern Ġthen Ġrespon ds Ġwith Ġok `() Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . spring . register ( Pattern Authenticated Config :: class . java ). aut ow ire () ĊĊĠĠĠĠĠĠĠ Ġthis . client . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ("/ public ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. exchange () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Status (). is Ok ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Enable Web Flux Security ĊĠĠĠ Ġ@ Enable Web Flux ĊĠĠĠ Ġopen Ġclass ĠPattern Authenticated Config Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġspring Web FilterChain ( http : ĠServer Http Security ): ĠSecurity Web FilterChain Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhttp Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthorize Exchange Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthorize ("/ public ", Ġpermit All ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthorize (" /** ", Ġauthenticated ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ RestController ĊĠĠĠĠĠĠĠ Ġinternal Ġclass ĠPath Controller Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ RequestMapping ("/ public ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġpublic () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` request Ġwhen Ġmissing Ġrequired Ġrole Ġthen Ġrespon ds Ġwith Ġforbidden `() Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . spring . register ( Has Role Config :: class . java ). aut ow ire () ĊĠĠĠĠĠĠĠ Ġthis . client ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. uri ("/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Basic Ġ" Ġ+ ĠBase 6 4 . get Encoder (). encode ToString (" user : password ". toByteArray ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. exchange () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Status (). is Forbidden ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Enable Web Flux Security ĊĠĠĠ Ġ@ Enable Web Flux ĊĠĠĠ Ġopen Ġclass ĠHas Role Config Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġspring Web FilterChain ( http : ĠServer Http Security ): ĠSecurity Web FilterChain Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhttp Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthorize Exchange Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthorize ( any Exchange , Ġhas Role (" ADMIN ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Basic Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġopen Ġfun Ġuser Details Service (): ĠMap Reactive UserDetails Service Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser . with Default Password Encoder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. username (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. password (" password ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. roles (" USER ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMap Reactive UserDetails Service ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ