package Ġcom . rk room . blog . config Ċ Ċ import Ġorg . apache . shiro . web . filter . auth c . Basic Http Authentication Filter Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . web . bind . annotation . Request Method Ċ import Ġjava . io . IOException Ċ import Ġjavax . servlet . Servlet Request Ċ import Ġjavax . servlet . Servlet Response Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ import Ġjavax . servlet . http . HttpServletResponse Ċ Ċ class ĠJWT Filter Ġ: ĠBasic Http Authentication Filter () Ġ{ ĊĠĠĠ Ġ// ä»£çłģ çļĦ æī§è¡Į æµģç¨ĭ Ġpre Handle Ġ-> Ġis Access Allowed Ġ-> Ġis Login Attempt Ġ-> Ġexecute Login ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ çĶ¨æĪ· æĺ¯åĲ¦ æĥ³è¦ģ çĻ» åħ¥ ãĢĤ ĊĠĠĠĠ Ġ* Ġæ£Ģ æµĭ header éĩĮéĿ¢ æĺ¯åĲ¦ åĮħåĲ« Authorization åŃĹæ®µ åį³åı¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġis Login Attempt ( request : ĠServlet Request ?, Ġresponse : ĠServlet Response ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġrequest Ġas ĠHttpServletRequest ĊĠĠĠĠĠĠĠ Ġval Ġauthorization Ġ= Ġreq . getHeader (" Authorization ") ĊĠĠĠĠĠĠĠ Ġreturn Ġauthorization Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġexecute Login ( request : ĠServlet Request ?, Ġresponse : ĠServlet Response ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhttp Servlet Request Ġ= Ġrequest Ġas ĠHttpServletRequest ĊĠĠĠĠĠĠĠ Ġval Ġauthorization Ġ= Ġhttp Servlet Request . getHeader (" Authorization ") ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠJWT Token ( authorization ) ĊĠĠĠĠĠĠĠ Ġ// ĠæıĲ äº¤ ç»Ļ realm è¿Ľè¡Į çĻ» åħ¥ ï¼Į å¦Ĥæŀľ éĶĻè¯¯ å®ĥ ä¼ļ æĬĽ åĩº å¼Ĥå¸¸ å¹¶ è¢« æį ķ èİ· ĊĠĠĠĠĠĠĠ Ġget Subject ( request , Ġresponse ). login ( token ) ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æ²¡æľī æĬĽ åĩº å¼Ĥå¸¸ åĪĻ ä»£è¡¨ çĻ» åħ¥ æĪĲåĬŁ ï¼Į è¿ĶåĽŀ true ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¿ĻéĩĮ æĪĳä»¬ è¯¦ç»Ĩ è¯´æĺİ ä¸ĭ ä¸ºä»Ģä¹Ī æľĢç»Ī è¿ĶåĽŀ çļĦ éĥ½æĺ¯ true ï¼Į åį³ åħģè®¸ è®¿éĹ® ĊĠĠĠĠ Ġ* Ġ ä¾ĭå¦Ĥ æĪĳä»¬ æıĲä¾Ľ ä¸Ģä¸ª åľ°åĿĢ ĠGET Ġ/ article ĊĠĠĠĠ Ġ* Ġ çĻ» åħ¥ çĶ¨æĪ· åĴĮ æ¸¸ å®¢ çľĭåĪ° çļĦåĨħå®¹ æĺ¯ ä¸įåĲĮçļĦ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ åľ¨ è¿ĻéĩĮ è¿ĶåĽŀ äºĨ false ï¼Į è¯·æ±Ĥ ä¼ļ è¢« çĽ´æİ¥ æĭ ¦ æĪª ï¼Į çĶ¨æĪ· çľĭ ä¸įåĪ° ä»»ä½ķ ä¸ľè¥¿ ĊĠĠĠĠ Ġ* Ġ æīĢä»¥ æĪĳä»¬ åľ¨ è¿ĻéĩĮ è¿ĶåĽŀ true ï¼Į Controller ä¸Ń åı¯ä»¥éĢļè¿ĩ Ġsubject . is Authenticated () ĠæĿ¥ åĪ¤æĸŃ çĶ¨æĪ· æĺ¯åĲ¦ çĻ» åħ¥ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ æľī äºĽ èµĦæºĲ åıªæľī çĻ» åħ¥ çĶ¨æĪ· æīįèĥ½ è®¿éĹ® ï¼Į æĪĳä»¬ åıª éľĢè¦ģ åľ¨ æĸ¹æ³ķ ä¸ĬéĿ¢ åĬł ä¸Ĭ Ġ@ Requires Authentication Ġ æ³¨è§£ åį³åı¯ ĊĠĠĠĠ Ġ* Ġ ä½Ĩæĺ¯ è¿Ļæł· åģļ æľīä¸Ģä¸ª ç¼º çĤ¹ ï¼Į å°±æĺ¯ ä¸įèĥ½ å¤Ł å¯¹ GET , POST çŃī è¯·æ±Ĥ è¿Ľè¡Į åĪĨåĪ« è¿ĩæ»¤ é ī ´ æĿĥ ( åĽłä¸º æĪĳä»¬ éĩį åĨĻ äºĨ å®ĺæĸ¹ çļĦæĸ¹æ³ķ )ï¼Į ä½Ĩ å®ŀéĻħ ä¸Ĭ å¯¹ åºĶçĶ¨ å½±åĵį ä¸į å¤§ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġis Access Allowed ( request : ĠServlet Request ?, Ġresponse : ĠServlet Response ?, Ġmapped Value : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Login Attempt ( request , Ġresponse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Login ( request , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse 4 0 1 ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¯¹ è·¨ åŁŁ æıĲä¾Ľ æĶ¯æĮģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġpre Handle ( request : ĠServlet Request ?, Ġresponse : ĠServlet Response ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhttp Servlet Request Ġ= Ġrequest Ġas ĠHttpServletRequest ĊĠĠĠĠĠĠĠ Ġval Ġhttp Servlet Response Ġ= Ġresponse Ġas ĠHttpServletResponse ĊĠĠĠĠĠĠĠ Ġhttp Servlet Response . setHeader (" Access - control - Allow - Origin ", Ġhttp Servlet Request . getHeader (" Origin ")) ĊĠĠĠĠĠĠĠ Ġhttp Servlet Response . setHeader (" Access - Control - Allow - Methods ", Ġ" GET , POST , OPTIONS , PUT , DELETE ") ĊĠĠĠĠĠĠĠ Ġhttp Servlet Response . setHeader (" Access - Control - Allow - Headers ", Ġhttp Servlet Request . getHeader (" Access - Control - Request - Headers ")) ĊĠĠĠĠĠĠĠ Ġ// Ġ è·¨ åŁŁ æĹ¶ ä¼ļ é¦ĸåħĪ åıĳéĢģ ä¸Ģä¸ª option è¯·æ±Ĥ ï¼Į è¿ĻéĩĮ æĪĳä»¬ ç»Ļ option è¯·æ±Ĥ çĽ´æİ¥ è¿ĶåĽŀ æŃ£å¸¸ çĬ¶æĢģ ĊĠĠĠĠĠĠĠ Ġif Ġ( http Servlet Request . method Ġ== ĠRequestMethod . OPTIONS . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Servlet Response . status Ġ= ĠHttpStatus . OK . value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . pre Handle ( request , Ġresponse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ éĿŀ æ³ķ è¯·æ±Ĥ è·³è½¬ åĪ° Ġ/ 4 0 1 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġresponse 4 0 1 ( resp : ĠServlet Response ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Servlet Response Ġ= Ġresp Ġas ĠHttpServletResponse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhttp Servlet Response . send Redirect ("/ 4 0 1 ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }