单点登录1 - 会话机制

1.会话机制

a.浏览器在第一次访问Tomcat服务器的时候,Tomcat服务器会在服务端创建session对象,并存储到map中.key是session的id,value是session对象本身.
b.在响应的时候会把session的id通过cookie的方式写到客户端浏览器中.
c.浏览器会在本地的目录中把session的id写入到本地的cookie中.

d.在后续的请求中,都会读取本地的cookie中的内容,并在请求的时候带上对应的cookie.



2.登录机制

有了会话机制,登录状态就好明白了,我们假设浏览器第一次请求服务器需要输入用户名与密码验证身份,服务器拿到用户名密码去数据库比对,正确的话说明当前持有这个会话的用户是合法用户,应该将这个会话标记为“已授权”或者“已登录”等等之类的状态,既然是会话的状态,自然要保存在会话对象中,Tomcat在会话对象中设置登录状态如下:

HttpSession session = request.getSession();
session.setAttribute("isLogin", true);

再次访问时,tomcat在会话对象中查看登录状态:

HttpSession session = request.getSession();
session.getAttribute("isLogin");

实现了登录状态的浏览器请求服务器模型如下图描述


===========================================================================

随着公司的发展,公司内部使用的系统越来越多.但是对于使用系统的员工来说不是个好事情.
1.每个系统都需要记住对应的账号和密码,很多员工都是每个系统的账户和密码都一样的.
2.如果同时要使用CRM系统,WMS系统,OA系统,用户需要登录三次.

3.如果不使用了,还需要分别在三个系统中依次的注销.


有没有这样的功能:我只需要登录一次,公司里面所有的系统都可以使用.只需要注销一次,所有的系统都退出登录了.

如果能实现这样的功能就非常好了.


虽然单系统的登录解决方案很完美,但对于多系统应用群已经不再适用了,为什么呢?

单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器与服务器之间维护会话状态。但cookie是有限制的,这个限制就是cookie的域(通常对应网站的域名),浏览器发送http请求时会自动携带与该域匹配的cookie,而不是所有cookie



既然这样,为什么不将web应用群中所有子系统的域名统一在一个顶级域名下,例如“*.baidu.com”,然后将它们的cookie域设置为“baidu.com”,这种做法理论上是可以的,甚至早期很多多系统登录就采用这种同域名共享cookie的方式。

然而,可行并不代表好,共享cookie的方式存在众多局限。首先,应用群域名得统一;其次,应用群各系统使用的技术(至少是web服务器)要相同,不然cookie的key值(tomcat为JSESSIONID)不同,无法维持会话,共享cookie的方式是无法实现跨语言技术平台登录的,比如java、php、.net系统之间;第三,cookie本身不安全。

因此,我们需要一种全新的登录方式来实现多系统应用群的登录,这就是单点登录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值