码迷,mamicode.com
首页 > Web开发 > 详细

不同web应用登录方案

时间:2015-02-12 19:51:49      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

最近做新的web应用, 要求可以用其他系统的账号登录,如老系统的单点登录,第三方平台登录情况,于是我从新梳理一下从最简单服务器登录到复杂的情况:

1.  单台服务器

1         原始服务器自动做的

浏览器第一次请求时,服务器端创建session,并把sessionid发给客户端存放在cookie中id为jssseionid。

浏览器第二次请求时,服务器获取客户端的cookie中的jsessionid,根据jsessionid找到session对象。

2         登录系统方案

2.1         登录:,需要过滤所有请求,判断是否登录过, 登录则可以通过,否则返回登录页。

2.2         在过滤器中,每次请求时,都获取session(request.getSession()),如果是第一次请求,此时session为新建的session,判断session中的用户信息是否存在(session.getAttrbute(“user”),登录时存放用户信息。)。如果不存在,则跳转到登录页面。

2.3         用户登录页面确认登录的请求到服务器时(此时用户身份验证过滤器不过滤该请求),验证用户信息,然后获取用户信息并将其存放到session(session.setAttbute(“user”))中,之后跳转页面返回客户端。此时完成登录。

2.4         再次请求时。同样获取session,判断session中的用户信息是否存在(session.getAttrbute(“user”),因为已经登录过,所以此时的user信息存在,则可以继续访问。

 

总结:

         单台服务器的登录,只需要在session中记录用户的信息,再次请求时,判断session中信息是否存在来判断是否登录过即可。不需要在自己往客户端写cookie。

2.  集群服务器

集群服务器登录跟单台的登录类似,不同之处是:客户端登录一台机器后,之后的请求可能被分配到其他的机器中,如果其他机器没有相关处理,则在其他机器上找不到登录信息会跳转到登录页。处理方式一般有两种情况:1、集群机器之间session同步。2、不同机器每次过滤请求时,没有登录的让其自动登录,这种情况需要一个登录信息记录在客户端中用于表明用户身份。

         第一种处理方式在每个集群中的节点上都保持session,会占用一定资源,一般采用第二种处理方式,第二种方式主要做的就是记录登录信息到客户端,登录信息一般包括登录用户、登录时间(用于有效时间限制)、登录客户端ip,然后进行加密处理。在服务器中过滤请求时,如果判断session中登录信息不存在,则从cookie中去登录信息加密字符串。如果有字符串则进行解密,安全校验,通过后将用户信息记录在session中,完成自动登录功能。

 

总结:需要将登录信息写到客户端cookie中,登录信息加密解密在每个集群中的节点中,加密可以用两个混淆值,一个系统的混淆值,和一个客户端没有的用户信息可变值做混淆值。

3.  Sso登录

单点登录和集群登录类似,不同之处在于登录信息的生成和校验是在SSO服务器中来做的,

用户登录时请求sso服务器,sso校验用户信息通过后生产登录信息,然后sso将登录信息写到客户端cookie中,客户端在请求应用服务器时,服务器判断session中没有登录信息后获取cookie中的用户信息字符串,并请求SSO服务器验证该字符串是否正确,如果正确并返回用户信息,应用服务器将用户信息放到session中。

 

总结:用户登录信息的生产和验证都要SSO服务器来做。应用服务器调用即可。

4.  第三方开放平台登录

第三方登录与单点登录类似,其实第三方就相当于一个SSO服务器。

不同web应用登录方案

标签:

原文地址:http://www.cnblogs.com/liuqingsha3/p/4288750.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!