单点登陆02(现实篇)
???? 要做个单点登陆的例子,要有以下:1用户身份认证服务器? 2两个应用系统。用户身份认证系统是提供认证功能和登陆功能的,应用系统是模拟跨域访问。项目结构如下图所示:
??? 其中有三个项目:Client 、Client2、Server。Client和Client2是应用系统用于模拟跨域访问的;而Server系统是用户身份验证的。三个都是Web工程。既然是web工程,那么众所周知Web协议(也就是HTTP)是一个无状态的协议。服务器是如何记录和保持登陆信息呢?
???? 浏览器访问一次服务器,就和服务器建立一次Sockect连接当服务器响应完毕时,就会断口连接。第二次访问的时候模式一样。为了保存信息软件师们发明了两个东西:Session和Cookie。Session是保持在服务端的会话信息,Cookie是持久化在客户端的会话信息。浏览器每次访问Web站点时都把此站点相应的Cookie信息发送给服务器,服务器从Cookie中取相应的字段(sessionId),然后根据字段在服务器的缓存中查找相应的Session,如果没查到则Request对象会自动新建一个Session对象。这些是基础没有这些知识很难理解如何实现SSO的。
首先建好上面三个工程,然后各自建相应的过滤器和页面(源码)可以先下载下来导入Eclipse中,启动Tomcat服务器。
??? 第一:client端的AuthFilter代码
? 这个是client端的验证用户是否登陆已经是否含有tickect信息的过滤器。
? 在上面的代码需要用到的参数在web.xml配置了,具体如下:
?其次也就是用户验证服务,有LoginServer和ValidationServer两个Servlet,LoginServer是检验用户cookies中是否含有tickect,然后重定向到验证服务中,而ValidationServer就是验证服务。认证服务的配置信息在web.xml中:
?LoginServer代码:
?ValidationServer代码:
?以上是代码,具体的流程序列图如:
运行下可以实现了传说中的SSO了。
?