@PreAuthorize 注解,顧名思義是進入方法前的權(quán)限驗證,@PreAuthorize 聲明這個方法所需要的權(quán)限表達(dá)式,例如:@PreAuthorize("hasAuthority('sys:dept:delete')"),
根據(jù)這個注解所需要的權(quán)限,再和當(dāng)前登錄的用戶角色所擁有的權(quán)限對比,如果用戶的角色權(quán)限集Set中有這個權(quán)限,則放行;沒有,拒絕
看代碼:
跟進hasAuthority方法
但是,問題來了,這個用戶的角色權(quán)限Set,是什么時候存入的,其流程如下:
附上代碼:
AbstractUserDetailsAuthenticationProvider 實現(xiàn)了 AuthenticationProvider.authenticate(Authentication authentication)
DaoAuthenticationProvider?extends AbstractUserDetailsAuthenticationProvider,所以要實現(xiàn)父類抽象方法retrieveUser()