博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不同web应用登录方案
阅读量:4511 次
发布时间:2019-06-08

本文共 1560 字,大约阅读时间需要 5 分钟。

最近做新的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服务器。

转载于:https://www.cnblogs.com/liuqingsha3/p/4288750.html

你可能感兴趣的文章
Python---- 函数
查看>>
javascript中的函数作用域和声明提前
查看>>
Xcode10升级项目报错library not found for -lstdc++.6.0.9
查看>>
谷歌Chrome浏览器如何设置网页的默认编码方法
查看>>
ZOJ-1129-Erdos Numbers
查看>>
java学习第四天 类和变量
查看>>
IDEA中如何添加RunDashboard
查看>>
单例静态继承
查看>>
Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.2——设置Flavors和Variants...
查看>>
Android零基础入门第36节:Android系统事件的响应
查看>>
POJ 2262 Goldbach's Conjecture
查看>>
自己手动写代码实现数据库连接池
查看>>
领域对象驱动开发:来吧,让我们从对象开始吧
查看>>
mysql分区分表讲解
查看>>
java编程思想读书笔记三(11-21)
查看>>
luogu P5302 [GXOI/GZOI2019]特技飞行
查看>>
EntityFramework 开始小试
查看>>
234 Palindrome Linked List
查看>>
Keil-MDK编译完成后代码大小
查看>>
ArcGIS JS 学习笔记4 实现地图联动
查看>>