首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

关于CAS兑现单点登录的思考

2012-12-19 
关于CAS实现单点登录的思考?? ? ?公司要做一个包括很多应用的系统,要实现单点登录,现在所有的应用都还没有

关于CAS实现单点登录的思考

?? ? ?公司要做一个包括很多应用的系统,要实现单点登录,现在所有的应用都还没有做好,在做架构,我负责单点登录。

?? ? ?于是研究了两天CAS,对用户注册这个问题很纠结,有以下两种方式,不知哪个更好,期待大家讨论。

?

?? ? ?1、Server端有DB,自己做好用户注册的实现,将接口提供给各个Client端(具体用什么方式让Client端调用是个难点,难点1)。

?? ? ? 这样的话,用户登录某一应用(CAS中的Client端)时,会被拦截,转到Server端,在Server端读数据库进行验证,验证通过后,返回到Client端,然后Client端再读自己的数据库,取出用户的信息(此处很纠结,因为各个Client的用户实体的属性是不一样的,比如有的Client端的用户有手机号这一属性,有的则没有,所以综合了一下,只希望在Server端存用户的用户名和密码)。

?

?? ? ?2、Server端无DB,注册时到各Client端只把用户信息保存到各自的DB。

?? ? ?这样的话,用户登录某一应用(CAS中的Client端)时,会被拦截,转到Server端,Server端根据请求的不同判断该调用哪个Client的DB进行验证(难点2),此处又要有分支了:

?? ? ?1)、验证的时候把用户信息读出来,验证通过后,将用户信息直接传给Client端(难点3),这样Client端就不用再读DB提取用户信息了。

?? ? ?2)、验证的时候不读用户的信息,验证通过后,返回到Client端,Client端再读用户信息。

?

大家觉的用什么方式好一些?并希望大家对标红的三个难点进行讨论。

?

?

这个帖子不错:http://www.iteye.com/topic/165313

?

BTW:

感谢大家的热情参与,特别鸣谢:wad12302、denger 、fallen_lord、lovit

大家可以看一下他们的发帖,会得到不少信息。

扩展CAS等具体做法请参照fallen_lord的发帖。

稍后我会参照他们的观点作出整理,loading..........

?

-----------------------------------分割线-----------------------------------------------------

?

现在正在实现着,等实现好了再把方案完整的贴出来。

采用的方式是REST,谢谢denger的建议,至于CAS怎么集成REST,大家可以去看denger博客上的文章:http://denger.iteye.com/blog/973068

?

loading...........

?

<bean id="dataSource1" destroy-method="close"> <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> <property name="url"><value>jdbc:mysql://192.168.1.244:3306/cas</value></property> <property name="username"><value>root</value></property> <property name="password"><value>root</value></property></bean><bean id="dataSource2" destroy-method="close"> <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> <property name="url"><value>jdbc:mysql://192.168.1.245:3306/cas1</value></property> <property name="username"><value>root</value></property> <property name="password"><value>root</value></property></bean>

然后找到:
<bean/>

把他注释掉,加上以下两个:
<bean value="select password from a_user where username=?" />      <property name="dataSource" ref="dataSource1" /></bean>        <bean value="select password from b_user where username=?" />      <property name="dataSource" ref="dataSource2" /></bean>

修改成这样就可以了。

然后:

假如a_user中有一个用户:auser,b_user中有一个用户buser,这样你无论用哪一个用户登录,CAS就会先查a_user,如果用户名密码都正确,那么就通过,如果a_user中验证失败,那么CAS就会再查b_user,用户名密码都正确就算通过了,此时不正确,就算这次登录验证没通过。

如果现在还不知道怎么回事,那我就哭了。。。。。
另外,千万不要成为伸手党,自己查资料才是王道。

我在deployerConfigContext.xml中配置了如下:
<bean value="select password from a_user where username=?" />      <property name="dataSource" ref="dataSource1" />[color=red][size=x-large]<property ref="passwordEncoder" name="passwordEncoder"/>[/size][/color]</bean>        <bean value="select password from b_user where username=?" />[color=red][size=x-large]<property ref="passwordEncoder" name="passwordEncoder"/>[/size][/color]      <property name="dataSource" ref="dataSource2" /></bean>

为什么就不行了?如果用第一个bean的username和password登录就没问题,用第二个bean的username和password登录就有问题呢?为什么?求解啊…… 70 楼 qq461149132 2012-09-25   lz,请问你的单点登录系统做好了吗?把详细方案说下哈。谢谢

热点排行