-- ·|­û / µù¥U -- ¡@
¡@±b¸¹¡G
¡@±K½X¡G
¡@ | µù¥U | §Ñ°O±K½X
3/26 ·s®Ñ¨ì¡I 3/19 ·s®Ñ¨ì¡I 3/14 ·s®Ñ¨ì¡I 12/12 ·s®Ñ¨ì¡I
ÁʮѬyµ{¡EQ & A¡E¯¸°È¯d¨¥ª©¡E«ÈªA«H½c
¢x 3ds Max¢x Maya¢x Rhino¢x After Effects¢x SketchUp¢x ZBrush¢x Painter¢x Unity¢x
¢x PhotoShop¢x AutoCad¢x MasterCam¢x SolidWorks¢x Creo¢x UG¢x Revit¢x Nuke¢x
¢x C#¢x C¢x C++¢x Java¢x ¹CÀ¸µ{¦¡¢x Linux¢x ´O¤J¦¡¢x PLC¢x FPGA¢x Matlab¢x
¢x Àb«È¢x ¸ê®Æ®w¢x ·j¯Á¤ÞÀº¢x ¼v¹³³B²z¢x Fluent¢x VR+AR¢x ANSYS¢x ²`«×¾Ç²ß¢x
¢x ³æ´¹¤ù¢x AVR¢x OpenGL¢x Arduino¢x Raspberry Pi¢x ¹q¸ô³]­p¢x Cadence¢x Protel¢x
¢x Hadoop¢x Python¢x Stm32¢x Cortex¢x Labview¢x ¤â¾÷µ{¦¡¢x Android¢x iPhone¢x
¥i¬d®Ñ¦W,§@ªÌ,ISBN,3dwoo®Ñ¸¹
¸Ô²Ó®ÑÄy¤ÀÃþ

²`¤J²L¥XSpring Security

( ²Åé ¦r)
§@ªÌ¡G¤ýªQÃþ§O¡G1. -> µ{¦¡³]­p -> JAVA -> Spring
ĶªÌ¡G
¥Xª©ªÀ¡G²MµØ¤j¾Ç¥Xª©ªÀ²`¤J²L¥XSpring Security 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©ÎªÌ·Q­n©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¤@­Ó¾Ç²ß¦UºØºôµ¸§ðÀ»»P¨¾±sµ¦²¤ªº¹Lµ{¡ASpring Security¹ï«Ü¦h±`¨£ºôµ¸§ðÀ»¡A¦p­p®É§ðÀ»¡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¤@³¡¤À¥D­n¤¶²ÐSpring Security¤¤ªº»{ÃÒ¥\¯à¡A¥H¤Î¥Ñ¦¹­l¥Í¥X¨Óªº·|¸ÜºÞ²z¡BHTTP¨¾¤õùÙ¡B¸ó°ìºÞ²zµ¥¡C
²Ä¤T³¡¤À¡G²Ä13¡ã14³¹¡A³o¤@³¡¤À¥D­n¤¶²ÐSpring Security¤¤ªº±ÂÅv¥\¯à¡A¥H¤Î±`¨£ªºÅv­­¼Ò«¬ACL©MRBAC¡C
²Ä¥|³¡¤À¡G²Ä15³¹¡A³o¤@³¡¤À¥D­n¤¶²Ð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ŪªÌ·Q­n¬Ý¨ì§¹¾ãªº¥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²¤¶¡G

Spring 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¾÷ºc­pºâ¾÷¬ÛÃö±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