package Ġmine k . sample . app . controller čĊč Ċ import Ġmine k . web . spring . auth . Policy Authentication č Ċ import Ġmine k . web . spring . auth . Principal č Ċ import Ġmine k . web . spring . auth . annotation . Authorize č Ċ import Ġmine k . web . spring . auth . annotation . Policy Authorize č Ċ import Ġmine k . web . spring . ret rofit . annotation . Ret rofit Service č Ċ import Ġmine k . web . spring . router . Reverse Router č Ċ import Ġmine k . web . spring . web . controller . Base Controller č Ċ import Ġorg . springframework . beans . factory . annotation . Autowired č Ċ import Ġorg . springframework . stereotype . Component č Ċ import Ġorg . springframework . stereotype . Controller č Ċ import Ġorg . springframework . ui . Model č Ċ import Ġorg . springframework . web . bind . annotation . GetMapping č Ċ import Ġorg . springframework . web . bind . annotation . PathVariable č Ċ import Ġorg . springframework . web . bind . annotation . RequestMapping č Ċ import Ġretrofit 2 . Call č Ċ import Ġretrofit 2 . http . GET čĊč Ċ @ Target ( Annotation Target . AN NOT ATION _ CLASS , ĠAnnotation Target . CLASS , ĠAnnotation Target . FUNCTION ) č Ċ @ Retention ( Annotation Retention . RUNTIME ) č Ċ @ Must Be Document ed č Ċ @ Authorize ( roles Ġ= Ġ[" admin "]) č Ċ annotation Ġclass ĠAdmin Authorize čĊč Ċ @ Controller č Ċ @ RequestMapping ("/ login - admin ") č Ċ @ Admin Authorize č Ċ class ĠLogin AdminController Ġ: ĠBaseController () Ġ{ čĊčĊĠĠĠ Ġ@ GetMapping ("/ test ") čĊĠĠĠ Ġfun Ġtest () Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ GetMapping ("/ test 2 ") čĊĠĠĠ Ġfun Ġtest 2 () Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} č Ċ } čĊč Ċ @ Component č Ċ class ĠSimple Policy Authentication 1 Ġ: ĠPolicy Authentication Ġ{ čĊčĊĠĠĠ Ġoverride Ġfun Ġhandle ( principal : ĠPrincipal ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠ Ġ} č Ċ } čĊč Ċ @ Component č Ċ class ĠSimple Policy Authentication 2 Ġ: ĠPolicy Authentication Ġ{ čĊčĊĠĠĠ Ġoverride Ġfun Ġhandle ( principal : ĠPrincipal ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠ Ġ} č Ċ } čĊč Ċ @ Component č Ċ class ĠSimple Policy Authentication 3 Ġ: ĠPolicy Authentication Ġ{ čĊčĊĠĠĠ Ġoverride Ġfun Ġhandle ( principal : ĠPrincipal ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠ Ġ} č Ċ } čĊč Ċ @ Policy Authorize ( policy Ġ= ĠSimple Policy Authentication 1 :: class ) č Ċ abstract Ġclass ĠPolicy Controller 1 čĊč Ċ @ Policy Authorize ( policy Ġ= ĠSimple Policy Authentication 2 :: class ) č Ċ abstract Ġclass ĠPolicy Controller 2 Ġ: ĠPolicy Controller 1 () čĊč Ċ @ Controller č Ċ @ RequestMapping ("/ login - multi - policy ") č Ċ @ Policy Authorize ( policy Ġ= ĠSimple Policy Authentication 3 :: class ) č Ċ class ĠLogin Multi Controller Ġ: ĠPolicy Controller 2 () Ġ{ čĊčĊĠĠĠ Ġ@ GetMapping ("/ test ") čĊĠĠĠ Ġ@ Authorize ( roles Ġ= Ġ[" admin , Ġuser "]) čĊĠĠĠ Ġfun Ġtest () Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ GetMapping ("/ test 2 ") čĊĠĠĠ Ġfun Ġtest 2 () Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} č Ċ } čĊč Ċ @ Controller č Ċ @ RequestMapping ("/ login - policy ") č Ċ @ Policy Authorize ( policy Ġ= ĠSimple Policy Authentication 1 :: class ) č Ċ class ĠLogin Policy Controller Ġ: ĠBaseController () Ġ{ čĊčĊĠĠĠ Ġ@ GetMapping ("/ test ") čĊĠĠĠ Ġ@ Authorize ( roles Ġ= Ġ[" admin , Ġuser "]) čĊĠĠĠ Ġfun Ġtest () Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ GetMapping ("/ test 2 ") čĊĠĠĠ Ġfun Ġtest 2 () Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} č Ċ } čĊč Ċ @ Controller č Ċ @ RequestMapping ("/ login - role ") č Ċ class ĠLogin Role Controller Ġ: ĠBaseController () Ġ{ čĊčĊĠĠĠ Ġ@ GetMapping ("/ test ") čĊĠĠĠ Ġ@ Authorize ( roles Ġ= Ġ[" admin , Ġuser "]) čĊčĊĠĠĠ Ġfun Ġtest () Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ GetMapping ("/ test 2 ") čĊĠĠĠ Ġfun Ġtest 2 () Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} č Ċ } čĊč Ċ @ Controller č Ċ @ RequestMapping ("/ login - class ") č Ċ @ Authorize č Ċ class ĠLogin Class Controller Ġ: ĠBaseController () Ġ{ čĊčĊĠĠĠ Ġ@ GetMapping ("/ test ") čĊĠĠĠ Ġfun Ġtest () Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} č Ċ } čĊč Ċ @ Controller č Ċ @ RequestMapping ("/ login - method ") č Ċ class ĠLogin Method Controller Ġ: ĠBaseController () Ġ{ čĊčĊĠĠĠ Ġ@ GetMapping ("/ test ") čĊĠĠĠ Ġ@ Authorize čĊĠĠĠ Ġfun Ġtest () Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} č Ċ } čĊč Ċ @ Controller č Ċ @ RequestMapping ("/ test - arg /{ h ong 1 }") č Ċ class ĠArg Controller Ġ{ čĊčĊĠĠĠ Ġ@ Autowired čĊĠĠĠ Ġlateinit Ġvar Ġreverse Router : ĠReverse Router čĊčĊĠĠĠ Ġ@ GetMapping ("/ test /{ userId }/ test 2 2 2 ") čĊĠĠĠ Ġfun Ġpath Var ial be Test (@ PathVariable (" userId ") ĠuserId : ĠString ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġcurrent Url For Ġ= Ġreverse Router . current Url For () čĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ GetMapping ("/ test / test 2 2 2 ") čĊĠĠĠ Ġfun Ġpath Var ial be Test 2 2 2 2 2 2 2 2 () Ġ{ čĊĠĠĠ Ġ} č Ċ } čĊč Ċ @ Controller č Ċ class ĠMain Controller Ġ: ĠBaseController () Ġ{ čĊčĊĠĠĠ Ġ@ Autowired čĊĠĠĠ Ġlateinit Ġvar Ġgithub ApiService : ĠGithub ApiService čĊčĊĠĠĠ Ġ@ Autowired čĊĠĠĠ Ġlateinit Ġvar Ġreverse Router : ĠReverse Router čĊčĊĠĠĠ Ġ@ GetMapping ( value Ġ= Ġ[" ", Ġ"/", Ġ"/ index "]) čĊĠĠĠ Ġfun Ġmain ( model : ĠModel ): ĠString Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġgithub ApiService . get (). execute (). body () čĊčĊĠĠĠĠĠĠĠ Ġmodel . addAttribute (" name ", Ġbody ) čĊčĊĠĠĠĠĠĠĠ Ġg . alert (" test \ nt est ") čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġ" main " čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ GetMapping ("/ router ") čĊĠĠĠ Ġfun Ġrouter () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġm vc Url 2 Ġ= Ġreverse Router . url For 2 ( Arg Controller :: path Var ial be Test ). args (" h ong 1 " Ġto Ġ" 5 5 5 ", Ġ" userId " Ġto Ġ" aaaa aaa "). build () čĊčĊĠĠĠĠĠĠĠ Ġval Ġm vc Url Ġ= Ġreverse Router . url For 2 ( Arg Controller :: path Var ial be Test 2 2 2 2 2 2 2 2 ). args (" h ong 1 " Ġto Ġ" 5 5 5 "). build () čĊčĊĠĠĠĠĠĠĠ Ġprintln () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ GetMapping ("/ bad Request ") čĊĠĠĠ Ġfun Ġbad Request 1 1 () Ġ{ čĊĠĠĠĠĠĠĠ Ġbad Request () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ GetMapping ("/ un authorized ") čĊĠĠĠ Ġfun Ġun authorized 1 1 () Ġ{ čĊĠĠĠĠĠĠĠ Ġun authorized () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ GetMapping ("/ not Found ") čĊĠĠĠ Ġfun Ġnot Found 1 1 1 () Ġ{ čĊĠĠĠĠĠĠĠ Ġnot Found () čĊĠĠĠ Ġ} č Ċ } čĊč Ċ @ Ret rofit Service č Ċ interface ĠGithub ApiService Ġ{ čĊčĊĠĠĠ Ġ@ GET ("/ get ") čĊĠĠĠ Ġfun Ġget (): ĠCall < String > č Ċ } čĊ