当前位置:编程学习 > JAVA >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,