通过HttpClient类调用其他子系统中action方法

最近只是项目中偶然用到,所以拿来在这里简单记录一下,以便后期使用。这里只是简单的HttpClient使用方法,而且这里只是用了get方法,关于其他HttpClient相关内容,待后续学习后补充。
下文代码中使用GET的请求方式,那么所有参数都直接放到页面的URL后面用问号与页面地址隔开,每个参数用&隔开,例如:http://java.sun.com/?name=liudong&mobile=123456

 

【ps】
HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient,更多使用 HttpClient 的应用可以参见http://wiki.apache.org/jakarta-httpclient/HttpClientPowered。HttpClient 项目非常活跃,使用的人还是非常多的。目前 HttpClient 版本是在 2005.10.11 发布的 3.0 RC4 。

单点登录系统技术(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,则进行跳转到单点登录认证界面。

过滤代码如下: