Posted on 2006-09-18 15:04
小小涼粉 閱讀(280)
評論(0) 編輯 收藏 所屬分類:
JavaEE
在驗證用戶登錄的時候,各個類調用的順序如下所示:
authenticationProcessionFilter(AuthenticationProcessingFilter)---->
authenticationManager(ProviderManger)---->
daoAuthenticationProvider(DaoAuthenticationProvider)---->
userDetailsService(UserDetailsService)
在最底層的UserDetailsService接口中,提供了loadUserByUsername這個方法,我們只需要實現這個接口,并實現接口中的方法,就可以使用自己的驗證功能了。該方法傳入的參數是String username,返回類型是UserDetails,很顯然,我們需要通過自己的dao,根據username來得到自定義的user類型,然后把它封裝到UserDetails里面去,然后返回。
另外,在UserDetail這個類里面,有一個GrantedAuthority[] 類型的屬性,用來存放該用戶所對應的權限,我們在loadUserByUsername這個方法里面,同樣也需要得到該用戶的權限,并把它賦給返回的UserDetails。
假如用戶對應的類名為UserInfo,權限對應的類名為Roles,在UserInfo中有一個變量
private Set roles;
在得到權限信息的時候,因為它是集合,所以可以使用延遲加載功能,讀取的時候先從緩存中取數據,如果取不到的話,就調用UserInfo.getRoles()方法,這個時候就會到數據庫中取數據了,取到以后,再把數據放到緩存中。