Spring-Security 子系统与CAS集成
下班了才开始写,那就长话短说。情况是这样的,我的职责是在CAS的SSO认证与用户管理模块的开发,有其他的team在做整个站点下的子系统,如APP. A。
目前我们考虑的是,将APP. A用 Spring-Security做其权限管理,我这边的CAS做其SSO服务器,并且APP. A是基于我的用户基础上的应用。
由于我这边的CAS服务器背后的数据库是安全数据库,存有用户的敏感信息,所以需求上是不想让子系统去接入安全数据库,当然
APP. A 也有其对应的应用数据库,来存储相应的应用信息。
为了能让AAP. A开发完后,可以很轻松的集成到我的CAS下,现在我需要为A 系统的开发人员做一些指导,能让他们可以有效对用户和权限进行管理。
目前我的思路是,APP. A端应用数据库建立如下表
,其中密码为默认值“NOT_USED”,即此字段没有使用,若重写userDetailService的话,该字段应该可以删除。
然后对应用户名与权限的表,最后是权限列表。
在APP. A与我的SSO集成后,所有我的用户都是没有存在他的应用数据库中的,只有用户进入APP.A具有权限页面后,才会对其
校验权限,首先是查看是否是CAS下的合法用户,
如果是,则检索APP. A的应用数据库,
如果没有该用户的用户及权限信息,则说明是第一次进入该系统,随之存入该用户的用户名,并分配初始权限。
如果存有该用户,则直接拿出其用户及权限信息。
然后重写spring-security的userDetailService类,如下
public class MyUserDetail implements UserDetailsService {
//在用户认证成功后,进入APP. A系统后,会进入APP. A此方法。
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
// TODO Auto-generated method stub
//1.获取用户名后,查询APP. A的users表
Users user = userdao.findUserByName(username);
//2.判断用户是否存在
if(user!=null){
//3.该用户存在,通过本地方法,将user及其权限信息存入UserDetails中
UserDetail userdetail = util.generateUserDetailsByUser(user);
//返回UserDetails
return userdetail;
}else{
//3.该用户不再APP.A 数据库中,也就是说,该用户是第一次访问APP. A 系统,
// 那么此时,为此用户分配初始的用户权限,即在用户表中存入用户与权限一条记录.
//存入成功后,返回关于该用户的UserDetail
UserDetail userdetail = util.giveOrginalAuthority(username);
return userdetail;
}
}
}
问题是,这种思路应该是没有问题的吧?
既没有涉及到安全数据,又能有效的对用户权限信息进行检索。
并且可以让各个子系统对其系统的权限独立控制。
有提议说,用接口(如webservice之类)来获取用户的权限,这样我有些不是太明白,如果有这方便的见解的,请给我一些思路。
感谢了,大家费心的看完,希望大家能给一些建议与意见,涕零谢过。
--------------------编程问答-------------------- 真的就没人了解我所说的吗?up --------------------编程问答-------------------- 继续nobody? --------------------编程问答-------------------- 只是想验证用户存不存在的话你可以这样做
补充:Java , Java EE