客户端请求web中间件session验证问题

来源:互联网 发布:在淘宝卖手工口红 编辑:程序博客网 时间:2024/06/06 06:32

1.使用HttpClient发起登录请求:

GET /sq_xa_apartment/api/mobile/exter.jhtml?serviceCode=0001&username=fangdong&password=E10ADC3949BA59ABBE56E057F20F883E HTTP/1.1

Accept    text/html, application/xhtml+xml, */*
Accept-Encoding    gzip, deflate
Accept-Language    zh-CN
Connection    Keep-Alive
Host    192.168.39.175:8086

User-Agent    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)


2.业务处理,web服务端接受请求,验证身份,存入session


3.web中间件响应请求

(Status-Line)    HTTP/1.1 200 OK
Cache-Control    no-cache
Date    Fri, 23 Nov 2012 04:29:41 GMT
Expires    Thu, 01 Jan 1970 00:00:00 GMT
Pragma    No-cache
Server    Apache-Coyote/1.1
Set-Cookie    JSESSIONID=60989C8636D962E56E7422A608119920;Path=/sq_xa_apartment
Transfer-Encoding    chunked

这是服务器为每个客户端分配的session内存存储标识,以后每次客户端调用只要把这个JSESSIONID 加入cookie或着作为参数传递给服务端。

4.再次请求服务端

取得上次返回的cookie,加入新的请求中

httpclientPost.setHeader("cookie","JSESSIONID=60989C8636D962E56E7422A608119920");

请求的报文如下


GET /sq_xa_apartment/api/mobile/exter.jhtml?flag=1&serviceCode=0002&pageNum=1&pageSize=10&identityCard= HTTP/1.1
Accept    text/html, application/xhtml+xml, */*
Accept-Encoding    gzip, deflate
Accept-Language    zh-CN
Connection    Keep-Alive
Cookie    JSESSIONID=60989C8636D962E56E7422A608119920
Host    192.168.39.175:8086
User-Agent    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)


知识点: http报文格式

HTTP请求头


当然如果是用ie访问方式则不用做上述的步骤,因为浏览器本身会缓存对应的jsession,如果客户端禁用了cookie事,就需要把这个jsession当做参数传递给web服务器,

处理方式如下

 1.LoginSessionListener方法实现了HttpSessionListener,并且重写sessionCreated和sessionDestroyed方法

2.在web.xml注册LoginSessionListener

3. 使用SessionContext.getSession(jsessionid)

String sessionId = req.getParameter("jsessionid"); HttpSession session = sessioncontext.getSession(sessionId); 

可以参考 URL:http://laolang.cn/back-end-develop/getsessionjava-servlet-api.html

原创粉丝点击