WebSecurity 的範疇,而經過FilterChain正式進入Controller時,就屬於 MethodSecurity 的部分啦~WebSecurity 負責處理URL訪問權限、身分及使用者驗證等。而 MethodSecurity 則可以結合使用者與方法參數加上Service Bean,判斷是否有XX權限。ROLE_{身分} 及 {權限} 去判斷使用者是否能進入該Method,作為進入Method前的防線。@RequirePermission 去判斷使用者是否含有某個Permission。像是 : @RequirePermission(needPermissionOf = PermissionCode.GET_USERS_LIST)
PreAuthorize、PostAuthorize、PreFilter、PostFilter
PreAuthorize 上去做研究,因為它適用於大部分場景!@Configuration
@EnableWebSecurity
@EnableMethodSecurity // <-- here
public class SecurityConfiguration {
//...省略
}
PreAuthorize 示範) ⭐⭐⭐⭐⭐
@PreAuthorize 加註在Contoller的端點Method前面。hasRole、hasAuthority、hasPermission 等。
@PreAuthorize("hasRole('ADMIN')")
PreAuthorize... 的方法時,MethodSecurity就會以 SpEL(Spring Expression Language)去解析字串內的敘述,並到UserDetails中搜尋 ROLE_ADMIN 的身分,若找不到則丟出 AccessDeniedException,找到則表示通過驗證進入Method中!本篇文章出自《每天學Java直到今年結束》Day233,大家可以到我的網站上查看~