Posted on 2006-09-18 15:04
小小涼粉 閱讀(280)
評(píng)論(0) 編輯 收藏 所屬分類:
JavaEE
在驗(yàn)證用戶登錄的時(shí)候,各個(gè)類調(diào)用的順序如下所示:
authenticationProcessionFilter(AuthenticationProcessingFilter)---->
authenticationManager(ProviderManger)---->
daoAuthenticationProvider(DaoAuthenticationProvider)---->
userDetailsService(UserDetailsService)
在最底層的UserDetailsService接口中,提供了loadUserByUsername這個(gè)方法,我們只需要實(shí)現(xiàn)這個(gè)接口,并實(shí)現(xiàn)接口中的方法,就可以使用自己的驗(yàn)證功能了。該方法傳入的參數(shù)是String username,返回類型是UserDetails,很顯然,我們需要通過(guò)自己的dao,根據(jù)username來(lái)得到自定義的user類型,然后把它封裝到UserDetails里面去,然后返回。
另外,在UserDetail這個(gè)類里面,有一個(gè)GrantedAuthority[] 類型的屬性,用來(lái)存放該用戶所對(duì)應(yīng)的權(quán)限,我們?cè)趌oadUserByUsername這個(gè)方法里面,同樣也需要得到該用戶的權(quán)限,并把它賦給返回的UserDetails。
假如用戶對(duì)應(yīng)的類名為UserInfo,權(quán)限對(duì)應(yīng)的類名為Roles,在UserInfo中有一個(gè)變量
private Set roles;
在得到權(quán)限信息的時(shí)候,因?yàn)樗羌希钥梢允褂醚舆t加載功能,讀取的時(shí)候先從緩存中取數(shù)據(jù),如果取不到的話,就調(diào)用UserInfo.getRoles()方法,這個(gè)時(shí)候就會(huì)到數(shù)據(jù)庫(kù)中取數(shù)據(jù)了,取到以后,再把數(shù)據(jù)放到緩存中。