由单点登陆引发的问题(一)

原有项目A里面需要加入一个B系统,要求从A系统登陆之后进入B系统,不需要再次重新登陆。上面给出的整合工期是10天。

整合问题:
1.实现单点登陆
2.A,B系统用户数据同步

首先我们解决单点登陆的问题,基于系统本身,这里有3个备选方案
a.cas
扩展性很好,需要独立部署一个中央认证系统.增加一个潜在的单点故障.
同时cas如何与a,b系统集成。另外cas用户认证的接口需要进行二次开发。
b.利用Cookie
不能用IP进行访问。必须要解决跨域问题(我们的项目目前在同一个域名下面,这点可以省略)。客户端必需启用COOKIE。
c.基于Spring Security 2.0,
提供自己的SSOAuthenticationFilter. 负责跨系统用户认证.在用户通过验证后保存Ticket.跨系统时B系统用同样的SSOAuthenticationFilter实现来检验用户提供的Ticket。
但在我们的B系统中没有Spring Security,这就需要在b系统中增加Spring Security。

所以我采用了一个折衷的方案:在A系统中提供自己的SSOAuthenticationFilter,把用户名和密码保存在cookie里(加密)。修改b系统本身的过滤器,当用户session里取不到值的时候,去cookie里查找。

<bean id="loginFilter" class="com.xxx.web.filter.SSOAuthenticationFilter">
<s:custom-filter before="AUTHENTICATION_PROCESSING_FILTER" />
<property name="authenticationManager" ref="authenticationManager"/>
</bean>


public static void setCookie(HttpServletRequest request,
HttpServletResponse response, String var, String value, int life) {

Cookie cookie = new Cookie(var, value);//var cookie名
//cookie.setDomain(".google.com");
cookie.setPath("/");

cookie.setMaxAge(life);//当life的值为-1时,关闭浏览器后,cookie立即失效
cookie.setSecure(request.getServerPort() == 443 ? true : false);
response.addCookie(cookie);
}

[color=red]注意:cookie.setDomain写上你的域名,在本地测试的时候,这里注释掉,而不要写localhost。取cookie值的时候,相同道理。不然无法取值。[/color]

如何查看cookie是否产生?值?
推荐:firefox插件Web Developer

另外如果你想实现 Spring Security 2.0 + CAS 配置单点登录
参考这里 [url]http://dakulaliu.iteye.com/blog/259721[/url]
我在自己本机上,测试成功。

A,B系统用户数据同步 问题,将在下一篇文章中给出。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值