²`¤J²L¥XSpring Security ( ²Åé ¦r) |
§@ªÌ¡G¤ýªQ | Ãþ§O¡G1. -> µ{¦¡³]p -> JAVA -> Spring |
ĶªÌ¡G |
¥Xª©ªÀ¡G²MµØ¤j¾Ç¥Xª©ªÀ | 3dWoo®Ñ¸¹¡G 54128 ¸ß°Ý®ÑÄy½Ð»¡¥X¦¹®Ñ¸¹¡I¡i¯Ê®Ñ¡j NT°â»ù¡G 495 ¤¸ |
¥Xª©¤é¡G3/1/2021 |
¶¼Æ¡G406 |
¥úºÐ¼Æ¡G0 |
|
¯¸ªø±ÀÂË¡G |
¦L¨ê¡G¶Â¥Õ¦L¨ê | »y¨t¡G ( ²Åé ª© ) |
|
¥[¤JÁʪ«¨® ¢x¥[¨ì§Úªº³Ì·R (½Ð¥ýµn¤J·|û) |
ISBN¡G9787302572763 |
§@ªÌ§Ç¡@|¡@ĶªÌ§Ç¡@|¡@«e¨¥¡@|¡@¤º®e²¤¶¡@|¡@¥Ø¿ý¡@|¡@§Ç |
(²Åé®Ñ¤W©Òz¤§¤U¸ü³sµ²¯Ó®É¶O¥\, ®¤¤£¾A¥Î¦b¥xÆW, YŪªÌ»Ýn½Ð¦Û¦æ¹Á¸Õ, ®¤¤£«OÃÒ) |
§@ªÌ§Ç¡G |
ĶªÌ§Ç¡G |
«e¨¥¡G¦w¥þºÞ²z¬OJavaÀ³¥Î¶}µo¤¤µLªkÁקKªº°ÝÃD¡A¥Ø«e¥D¬yªº¦w¥þºÞ²z®Ø¬[´N¬OSpring Security©MShiro¡A¨ä¤¤Shiro¤@ª½¥H¨Ï¥Î²³æ©M»´¶q¯ÅµÛºÙ¡CµM¦Ó¡AÀHµÛSpring Boot©M·LªA°Èªº¬y¦æ¡ASpring Security¨ü¨ì¶V¨Ó¶V¦h¶}µoªÌªº«µø¡A¦]¬°Spring Security¦b©MSpring Boot¾ã¦X®É¨ã¦³¥ý¤ÑÀu¶Õ¡C ¥Ø«e¥«±¤W¯Ê¤Ö¨t²Î¤¶²ÐSpring Securityªº®ÑÄy¡Aºô¤Wªº³Õ«È¤º®e¤S¤ñ¸û¹s´²¡A³o¬°«Ü¦hªì¦¸±µÄ²Spring SecurityªºJava¤uµ{®v¾Ç²ß³oªù§Þ³N±a¨Ó½Ñ¦h¤£«K¡C µ§ªÌ³Ì¦¤_Ó¤H³Õ«È¤W³s¸üSpring Security¨t¦C±Ðµ{¡A³s¸ü´Á¶¡¦³¤£¤ÖŪªÌ¥[µ§ªÌ·L«H°Q½×Spring Securityªº¬ÛÃö§Þ³NÂI¡AÅýµ§ªÌ·P¨ü¨ìŪªÌ¹ïSpring Securityªº¼ö±¡¡A¤]¦]¦¹µÞ¥Í¤F¼g¤@¥»§Þ³N¹Ï®Ñ¨Ó¨t²Î¤¶²ÐSpring Securityªº·Qªk¡C¦bªB¤Í©M®a¤Hªº¹ªÀy¤§¤U¡A³o¤@·Qªk³v¨B¥I½Ñ¹ê½î¡A³Ì²×§¹¦¨¤j®a²{¦b¬Ý¨ìªº³o¥»¡m²`¤J²L¥XSpring Security¡n¡C ¥»®Ñ¥HSpring Security 5.3.4¬°°ò¦¡A¸Ô²Ó¤¶²ÐSpring Securityªº°ò¥»¥Îªk¥H¤Î¬ÛÃöì²z¡C±o¯q¤_Spring Boot¤¤ªº¦Û°Ê¤Æ°t¸m¡ASpring Security¤W¤â«D±`®e©ö¡AµM¦Ó³oºØ¦Û°Ê¤Æ°t¸m¡A¤]Åý«Ü¦hªì¦¸±µÄ²Spring Securityªº¶}µoªÌ¡§ª¾¨äµM¡A¦Ó¤£ª¾¨ä©Ò¥HµM¡¨¡A¶È¤_·|¥Î¡A¤@¥¹¥X¤Fº|¬}¡A©ÎªÌ·Qn©w¨î¥\¯à®É¡A´N·|¤£ª¾©Ò±¹¡C¦]¦¹¡A¦b¼g§@¥»®Ñ¹Lµ{¤¤¡A°£¤F°ò¥»¥\¯àªºDemoºt¥Ü¥~¡AÁÙ¹ïSpring Securityªº¬ÛÃö·½½X°µ¤F²`¤J¤ÀªR¡A¥H«KŪªÌ¡§ª¾¨äµM¡A§óª¾¨ä©Ò¥HµM¡¨¡C ¾Ç²ßSpring Security¤£¶È¶È¬O¾Ç²ß¦w¥þºÞ²z®Ø¬[¡A¤]¬O¤@ӾDzߦUºØºôµ¸§ðÀ»»P¨¾±sµ¦²¤ªº¹Lµ{¡ASpring Security¹ï«Ü¦h±`¨£ºôµ¸§ðÀ»¡A¦pp®É§ðÀ»¡BCSRF¡BXSSµ¥¡A³£´£¨Ñ¤F¬ÛÀ³ªº¨¾±sµ¦²¤¡A¦]¦¹¡A§Ú̦b¾Ç²ßSpring Security®É¡A¤]¥i¥H¶¶«K¬ã¨s¤@¤U³o¨Ç±`¨£ªººôµ¸§ðÀ»¡A¥H«K³]p¥X§ó¥[¦w¥þ°·§§ªºÅvºÞ²z¨t²Î¡C ¥»®Ñ¤À¬°¥|³¡¤À¡G ²Ä¤@³¡¤À¡G²Ä1³¹¡A³o¤@³¡¤ÀÁ`Å餶²ÐSpring Security¬[ºc¡A¤è«KŪªÌ±q¾ãÅé¤W§â´¤Spring Securityªº¥\¯à¡C ²Ä¤G³¡¤À¡G²Ä2¡ã12³¹¡A³o¤@³¡¤À¥Dn¤¶²ÐSpring Security¤¤ªº»{ÃÒ¥\¯à¡A¥H¤Î¥Ñ¦¹l¥Í¥X¨Óªº·|¸ÜºÞ²z¡BHTTP¨¾¤õùÙ¡B¸ó°ìºÞ²zµ¥¡C ²Ä¤T³¡¤À¡G²Ä13¡ã14³¹¡A³o¤@³¡¤À¥Dn¤¶²ÐSpring Security¤¤ªº±ÂÅv¥\¯à¡A¥H¤Î±`¨£ªºÅv¼Ò«¬ACL©MRBAC¡C ²Ä¥|³¡¤À¡G²Ä15³¹¡A³o¤@³¡¤À¥Dn¤¶²ÐOAuth2¨óij¦bSpring Security®Ø¬[¤¤ªº¸¨¦a¡C ¥Ü¨Ò¥N½X¬ù©w ¬°¤F´î¤Ö¥N½X¤¾§E©M¥»®Ñ½g´T¡A®Ñ¤¤ªº©Ò¦³¥Ü¨Ò¥N½X¤ù¬q³£¬Ù²¤¤Fpackage©Mimport³¡¤À¡A¹³¤U±³o¼Ë¡G @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login.html") .loginProcessingUrl("/doLogin") .defaultSuccessUrl("/index ") .failureUrl("/login.html") .usernameParameter("uname") .passwordParameter("passwd") .permitAll() .and() .csrf().disable(); } } ¦³®ÉÔ¬°¤F¦VŪªÌºt¥Ü¥N½Xªº¹B¦æ®ÄªG¡A¤@Ӯרҥi¯à·|³Q¤Ï´_קï¦h¦¸¡A¨º¤\¦b¦Z±®i¥Ü¥N½X®É¡A±N¤£¦A¦C¥X¤£Åܪº³¡¤À¡A¶È¶È¦C¥Xµo¥ÍÅܤƪº¥N½X¤ù¬q¡A¹³¤U±³o¼Ë¡G @Autowired TokenStore tokenStore; @Autowired JwtAccessTokenConverter jwtAccessTokenConverter; @Bean AuthorizationServerTokenServices tokenServices() { DefaultTokenServices services = new DefaultTokenServices(); services.setClientDetailsService(clientDetailsService); services.setSupportRefreshToken(true); services.setTokenStore(tokenStore); TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain(); tokenEnhancerChain .setTokenEnhancers(Arrays.asList(jwtAccessTokenConverter)); services.setTokenEnhancer(tokenEnhancerChain); return services; } //¬Ù²¤¨ä¥L ¥¿±`±¡ªp¤U¡A³o¼Ëªº¥N½X¤ù¬q¦}¤£·|¼vÅT¤j®a²z¸Ñ¥»®Ñ¤º®e¡C¦pªGŪªÌ·Qn¬Ý¨ì§¹¾ãªº¥N½X¤ù¬q¡A¥i¥H¤U¸ü¥»®Ñ´£¨Ñªº¥Ü¨Ò¥N½X¶i¦æ¹ï·Ó²z¸Ñ¡C ·½½X¬Ù²¤¬ù©w ¦b¤ÀªRSpring Security·½½X®É¡A¬°¤F²¤Æ·½½X©M½g´T¥H«K¤_ŪªÌ²z¸Ñ¡A·½½X¤¤ªº¤é§Ó¿é¥X¡Bª`ÄÀ¥H¤Î¤@¨ÇµLÃöºònªº¥N½X·|³Q²¾°£±¼¡A¹³¤U±³o¼Ë¡G @ConfigurationProperties(prefix = "spring.security") public class SecurityProperties { private User user = new User(); public User getUser() { return this.user; } public static class User { private String name = "user"; private String password = UUID.randomUUID().toString(); private List<String> roles = new ArrayList<>(); //¬Ù²¤getter/setter } } ¦pªGŪªÌı±o³o¼Ë¾\Ū¡§¤£¹LÅ}¡¨¡A¤]¥i¥H¤U¸üSpring Security·½½X¹ï·Ó²z¸Ñ¡C ŪªÌ©w¦ì ¾\Ū¥»®Ñ»Ýn¦³¤@©wªºSpring Boot°ò¦¡A¹ï¤_µLSpring Boot°ò¦ªºÅªªÌ¡A¥i¥H¥ý¾Ç²ßSpring BootµM¦Z¦A¨Ó¾\Ū¥»®Ñ¡C¾Ç²ßSpring Boot¡A¥i¥H°Ñ¦Òµ§ªÌ½s¼gªº¹Ï®Ñ¡mSpring Boot+Vue¥þ´Ì¶}µo¹ê¾Ô¡n©ÎªÌµ§ªÌªº±Ðµ{¡C ·½½XÀò¨ú ¥»®Ñ©Ò¦³ªº¥Ü¨Ò¥N½X§¡¦s©ñ¦bGitHub¤W ©Ò¦³¤uµ{§¡¬°¼Ð·ÇªºMaven¤uµ{¡A¥i¥H¥ÎIntelliJ IDEA©ÎªÌEclipse¥´¶}¡C ªÈ¿ù»P°É»~ ¦pªGŪªÌ¦b¾\Ū¥»®Ñ®Éµo²{¿ù»~¡A¥i¥H±N¿ù»~´£¥æ ¡Aµ§ªÌ±N¿ù»~¤º®e¶×Á`¦Z¦P¨Bµo¥¬¥H¤Î·L«H¤½²³¸¹¡§¦¿«n¤@ÂI«B¡¨¡C×¥¿¦Zªº¤º®e±N¦b¦ZÄò«¦Lªº®Ñ¤¤±o¨ìÅé²{¡C ¥æ¬yªÀ°Ï ¾ÇµL¤î¹Ò¡Aµ§ªÌ±NÄ~Äò¹ïSpring Securityªºµo®i«O«ùÃöª`¡CÃö¤_Spring Securityªº³Ì·sÅܤơAµ§ªÌ³£±Nµo¥¬¦b·L«H¤½²³¸¹¡§¦¿«n¤@ÂI«B¡¨¤W¡AŪªÌÃöª`·L«H¤½²³¸¹¦Z¡A¤]¥i¥H¶i¤J¥»®Ñ·L«H¥æ¬y¸s¶i¦æ¥æ¬y¡C
¤ýªQ 2021¦~1¤ë |
¤º®e²¤¶¡GSpring Security¬OJava¥ø·~¯Å¶}µo¤¤±`¥Îªº¦w¥þºÞ²z®Ø¬[¡A¤]¯à§¹¬ü¤ä«ùOAuth2¡C¦P®É¡ASpring Security§@¬°Spring®a±Úªº¤@û¡A»PSpring Boot¡BSpring Cloudµ¥®Ø¬[¾ã¦X¨Ï¥Î¤]«D±`¤è«K¡C ¥»®Ñ¤À¬°15³¹¡AÁ¿¸ÑSpring Security®Ø¬[¡B»{ÃÒ¡B»{ÃÒ¬yµ{¤ÀªR¡B¹LÂo¾¹Ãì¤ÀªR¡B±K½X¥[±K¡BRememberMe¡B·|¸ÜºÞ²z¡BHttpFirewall¡Bº|¬}«OÅ@¡BHTTP»{ÃÒ¡B¸ó°ì°ÝÃD¡B²§±`³B²z¡BÅvºÞ²z¡BÅv¼Ò«¬¡BOAuth2µ¥¤º®e¡C¥»®ÑP¤O¤_ÅýŪªÌ¦b¾Ç·|Spring Security¥Îªkªº¦P®É¡A¤]¯à³q¹L¾\Ū·½½X¨Ó²z¸Ñ¥¦ªº¹ê²{ì²z¡C ¥»®Ñ¾A¦X¨ã¦³Spring Boot°ò¦ªºÅªªÌ¡BJava¥ø·~À³¥Î¶}µo¤uµ{®v¡A¤]¾A¦X§@¬°°ªµ¥°|®Õ©M°ö°V¾÷ºcpºâ¾÷¬ÛÃö±M·~®v¥Íªº±Ð¾Ç°Ñ¦Ò®Ñ¡C |
¥Ø¿ý¡G²Ä1³¹SpringSecurity¬[ºc·§Äý 1 1.1SpringSecurity²¤¶ 1 1.2SpringSecurity®Ö¤ß¥\¯à 2 1.2.1»{ÃÒ 3 1.2.2±ÂÅv 3 1.2.3¨ä¥L 3 1.3SpringSecurity¾ãÅé¬[ºc 4 1.3.1»{ÃÒ©M±ÂÅv 4 1.3.2Web¦w¥þ 6 1.3.3µn¿ý¼Æ¾Ú«O¦s 9 1.4¤pµ² 9 ²Ä2³¹SpringSecurity»{ÃÒ 10 2.1SpringSecurity°ò¥»»{ÃÒ 10 2.1.1§Ö³t¤Jªù 10 2.1.2¬yµ{¤ÀªR 11 2.1.3ì²z¤ÀªR 12 2.2µn¿ýªí³æ°t¸m 19 2.2.1§Ö³t¤Jªù 19 2.2.2°t¸m²Ó¸` 23 2.3µn¿ý¥Î¤á¼Æ¾ÚÀò¨ú 39 2.3.1±qSecurityContextHolder¤¤Àò¨ú 41 2.3.2±q·í«e½Ð¨D¹ï¶H¤¤Àò¨ú 59 2.4¥Î¤á©w¸q 64 2.4.1°ò¤_¤º¦s 64 2.4.2°ò¤_JdbcUserDetailsManager 65 2.4.3°ò¤_MyBatis 68 2.4.4°ò¤_SpringDataJPA 74 2.5¤pµ² 77 ²Ä3³¹»{ÃÒ¬yµ{¤ÀªR 78 3.1µn¿ý¬yµ{¤ÀªR 78 3.1.1AuthenticationManager 78 3.1.2AuthenticationProvider 79 3.1.3ProviderManager 86 3.1.4AbstractAuthenticationProcessingFilter 89 3.2°t¸m¦hӼƾڷ½ 94 3.3²K¥[µn¿ýÅçÃÒ½X 95 3.4¤pµ² 99 ²Ä4³¹¹LÂo¾¹Ãì¤ÀªR 100 4.1ªì©l¤Æ¬yµ{¤ÀªR 100 4.1.1ObjectPostProcessor 101 4.1.2SecurityFilterChain 102 4.1.3SecurityBuilder 103 4.1.4FilterChainProxy 117 4.1.5SecurityConfigurer 120 4.1.6ªì©l¤Æ¬yµ{¤ÀªR 128 4.2ObjectPostProcessor¨Ï¥Î 136 4.3¦hºØ¥Î¤á©w¸q¤è¦¡ 137 4.4©w¸q¦hÓ¹LÂo¾¹Ãì 141 4.5ÀRºA¸ê·½¹LÂo 144 4.6¨Ï¥ÎJSON®æ¦¡µn¿ý 146 4.7²K¥[µn¿ýÅçÃÒ½X 150 4.8¤pµ² 152 ²Ä5³¹±K½X¥[±K 153 5.1±K½X¬°¤°¤\n¥[±K 153 5.2±K½X¥[±K¤è®×¶i¤Æ¥v 154 5.3PasswordEncoder¸Ô¸Ñ 154 5.3.1PasswordEncoder±`¨£¹ê²{Ãþ 155 5.3.2DelegatingPasswordEncoder 156 5.4¹ê¾Ô 159 5.5¥[±K¤è®×¦Û°Ê¤É¯Å 161 5.6¬O½ÖªºPasswordEncoder 166 5.7¤pµ² 168 ²Ä6³¹RememberMe 169 6.1RememberMe²¤¶ 169 6.2RememberMe°ò¥»¥Îªk 170 6.3«ù¤[¤Æ¥OµP 172 6.4¤G¦¸®ÕÅç 174 6.5ì²z¤ÀªR 176 6.6¤pµ² 189 ²Ä7³¹·|¸ÜºÞ²z 190 7.1·|¸Ü²¤¶ 190 7.2·|¸Ü¦}µoºÞ²z 191 7.2.1¹ê¾Ô 191 7.2.2ì²z¤ÀªR 194 7.3·|¸Ü©T©w§ðÀ»»P¨¾±s 206 7.3.1¤°¤\¬O·|¸Ü©T©w§ðÀ» 206 7.3.2·|¸Ü©T©w§ðÀ»¨¾±sµ¦²¤ 207 7.4Session¦@¨É 208 7.4.1¶°¸s·|¸Ü¤è®× 208 7.4.2¹ê¾Ô 210 7.5¤pµ² 212 ²Ä8³¹HttpFirewall 213 8.1HttpFirewall²¤¶ 213 8.2HttpFirewallÄY®æ¼Ò¦¡ 215 8.2.1rejectForbiddenHttpMethod 216 8.2.2rejectedBlacklistedUrls 217 8.2.3rejectedUntrustedHosts 218 8.2.4isNormalized 219 8.2.5containsOnlyPrintableAsciiCharacters 220 8.3HttpFirewall´¶³q¼Ò¦¡ 220 8.4¤pµ² 221 ²Ä9³¹º|¬}«OÅ@ 222 9.1CSRF§ðÀ»»P¨¾±s 222 9.1.1CSRF²¤¶ 222 9.1.2CSRF§ðÀ»ºt¥Ü 223 9.1.3CSRF¨¾±s 224 9.1.4·½½X¤ÀªR 231 9.2HTTPÅTÀ³ÀY³B²z 237 9.2.1½w¦s±±¨î 239 9.2.2X-Content-Type-Options 240 9.2.3Strict-Transport-Security 241 9.2.4X-Frame-Options 244 9.2.5X-XSS-Protection 245 9.2.6Content-Security-Policy 246 9.2.7Referrer-Policy 248 9.2.8Feature-Policy 249 9.2.9Clear-Site-Data 249 9.3HTTP³q«H¦w¥þ 250 9.3.1¨Ï¥ÎHTTPS 250 9.3.2¥N²zªA°È¾¹°t¸m 253 9.4¤pµ² 254 ²Ä10³¹HTTP»{ÃÒ 255 10.1HTTPBasicauthentication 255 10.1.1²¤¶ 255 10.1.2¨ãÅé¥Îªk 257 10.1.3·½½X¤ÀªR 257 10.2HTTPDigestauthentication 260 10.2.1²¤¶ 260 10.2.2¨ãÅé¥Îªk 261 10.2.3·½½X¤ÀªR 263 10.3¤pµ² 268 ²Ä11³¹¸ó°ì°ÝÃD 269 11.1¤°¤\¬OCORS 269 11.2Spring³B²z¤è®× 270 11.2.1@CrossOrigin 271 11.2.2addCorsMappings 272 11.2.3CorsFilter 273 11.3SpringSecurity³B²z¤è®× 274 11.3.1¯S®í³B²zOPTIONS½Ð¨D 275 11.3.2Ä~Äò¨Ï¥ÎCorsFilter 275 11.3.3±M·~¸Ñ¨M¤è®× 276 11.4¤pµ² 279 ²Ä12³¹²§±`³B²z 280 12.1SpringSecurity²§±`Åé¨t 280 12.2ExceptionTranslationFilterì²z¤ÀªR 281 12.3¦Û©w¸q²§±`°t¸m 287 12.4¤pµ² 290 ²Ä13³¹ÅvºÞ²z 291 13.1¤°¤\¬OÅvºÞ²z 291 13.2SpringSecurityÅvºÞ²zµ¦²¤ 292 13.3®Ö¤ß·§©À 292 13.3.1¨¤¦â»PÅv 292 13.3.2¨¤¦âÄ~©Ó 294 13.3.3¨âºØ³B²z¾¹ 295 13.3.4«e¸m³B²z¾¹ 296 13.3.5¦Z¸m³B²z¾¹ 299 13.3.6Åv¤¸¼Æ¾Ú 300 13.3.7Åvªí¹F¦¡ 303 13.4°ò¤_URL¦a§}ªºÅvºÞ²z 305 13.4.1°ò¥»¥Îªk 306 13.4.2¨¤¦âÄ~©Ó 308 13.4.3¦Û©w¸qªí¹F¦¡ 309 13.4.4ì²zåªR 310 13.4.5°ÊºAºÞ²zÅv³W«h 316 13.5°ò¤_¤èªkªºÅvºÞ²z 325 13.5.1ª`¸Ñ¤¶²Ð 325 13.5.2°ò¥»¥Îªk 326 13.5.3ì²zåªR 331 13.6¤pµ² 338 ²Ä14³¹Åv¼Ò«¬ 339 14.1±`¨£ªºÅv¼Ò«¬ 339 14.2ACL 340 14.2.1ACLÅv¼Ò«¬¤¶²Ð 340 14.2.2ACL®Ö¤ß·§©À¤¶²Ð 341 14.2.3ACL¼Æ¾Ú®w¤ÀªR 343 14.2.4¹ê¾Ô 345 14.3RBAC 354 14.3.1RBACÅv¼Ò«¬¤¶²Ð 354 14.3.2RBACÅv¼Ò«¬¤ÀÃþ 355 14.3.3RBAC¤pµ² 357 14.4¤pµ² 357 ²Ä15³¹OAuth2 358 15.1OAuth2²¤¶ 358 15.2OAuth2¥|ºØ±ÂÅv¼Ò¦¡ 359 15.2.1±ÂÅv½X¼Ò¦¡ 360 15.2.2²¤Æ¼Ò¦¡ 361 15.2.3±K½X¼Ò¦¡ 363 15.2.4«È¤áºÝ¼Ò¦¡ 363 15.3SpringSecurityOAuth2 364 15.4GitHub±ÂÅvµn¿ý 365 15.4.1·Ç³Æ¤u§@ 365 15.4.2¶µ¥Ø¶}µo 367 15.4.3´ú¸Õ 368 15.4.4ì²z¤ÀªR 369 15.4.5¦Û©w¸q°t¸m 375 15.5±ÂÅvªA°È¾¹»P¸ê·½ªA°È¾¹ 379 15.5.1¶µ¥Ø³W¹º 379 15.5.2¶µ¥Ø·f«Ø 380 15.5.3´ú¸Õ 391 15.5.4ì²z¤ÀªR 393 15.5.5¦Û©w¸q½Ð¨D 396 15.6¨Ï¥ÎRedis 397 15.7«È¤áºÝ«H®§¦s¤J¼Æ¾Ú®w 399 15.8¨Ï¥ÎJWT 401 15.8.1JWT 401 15.8.2JWT¼Æ¾Ú®æ¦¡ 402 15.8.3OAuth2¤¤¨Ï¥ÎJWT 403 15.9¤pµ² 406 |
§Ç¡G |