单点登录系统技术(HttpClient)梳理(二)

系统中两种单点登录实现方式:

1、  直接登录单点登录认证系统。

2、  登录业务系统,如用户此时为首次登录,则跳转得到单点登录认证界面。如用户已通过认证,则直接登录到业务系统。

 

【补充说明】

单点登录认证服务器地址:http://192.168.61.124:8080/SSOAuth_v1.0.0/

业务系统服务器地址:http://192.168.61.134:8080/sepmis_v1.3.0/

 

直接登录单点登录认证系统流程:

1、  打开单点登录认证服务器登录页面,输入用户名密码。

2、  如果通过认证,此时页面跳转到系统主界面main.jsp。这个时候在加载main.jsp页面同时,页面后端通过ajax中jsonp方式,向单点登录认证服务器后台Action发送hello请求。需要传递参数,当前用户代码。

main.jsp页面核心代码如下:

3、  后台接受hello请求,通过传递的参数用户代码,在SysRealuser表中判断用户所能够访问到的业务系统对象。拿到业务系统对象中url参数,组织各个业务系统setCookie Url。然后通过json异步传回前台。

Url格式例如:(红色字体处为变量)

http://192.168.61.134:8080/sepmis_v1.3.0/setCookie.do?userCode=xxx&&callback=?

代码如下:

4、  前台main.jsp页面这时拿到传回的URL参数,此时执行Success代码段中的函数

此时function中参数data就是传回的URL参数,然后遍历执行Jquery中getJSON方法。此时通过AJAX技术异步又向各个业务系统发送setCookie请求,此操作可以视为一种透明的登录操作,用户是不能够感知到。

5、  业务系统接受setCookie action请求。

代码如下:

业务系统通过setCookie方法,将此用户在业务系统中Cookie存储到用户本地。

6、  输入业务系统连接。

业务系统同后台通过filter过滤所有请求,获取用户在当前服务器域下Cookie值,进行校验,通过校验进入系统,未通过校验返回单点登录认证页面。

SSOFilter.java核心代码如下

执行通过业务系统fileter将,根据不同的请求进行不同的操作。获取业务系统Cookie后同构使用HttpClient类方法调用单点认证中的authcookie方法,验证用户Cookie的合法性。

RealSysLoginAction.java类authcookie方法代码:

此种登录方法要修改原有业务系统中的登录action方法。

 

业务系统LoginSSOAction.java类,loginSSO登录方法

业务系统总filter 在web.xml文件中配置方法:

未通过认证,登录业务系统,跳转到单点登录认证。

1、  输入业务系统服务地址

2、  系统自动跳转到单点登录服务器,下边过程同上“直接登录单点登录认证系统流程”

其原理是通过filter实现类中dofilter方法进行过滤,判断用没有Cookie,则进行跳转到单点登录认证界面。

过滤代码如下: