`
dearwolf
  • 浏览: 339564 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

acegi学习笔记——1

阅读更多

在验证用户登录的时候,各个类调用的顺序如下所示:

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()方法,这个时候就会到数据库中取数据了,取到以后,再把数据放到缓存中。

分享到:
评论
1 楼 chengshwu 2007-05-16  
能给一个实现这个userdetailservice的类的例子吗?

相关推荐

Global site tag (gtag.js) - Google Analytics