Posted on 2006-09-18 15:04
小小凉粉 阅读(272)
评论(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()方法,这个时候就会到数据库中取数据了,取到以后,再把数据放到缓存中。