java访问webservce,保持会话,服务端保存session验证
2013-09-11 14:52
351 查看
在进行程序开发的过程中,遇到一个问题,怎么保持会话。
因为一帮进行方法调用很少涉及到即时身份验证的。
例如:
1:客户端登录后服务端保存登录用户信息;
2:客户端持有验证通过key再次请求;
3:服务端得到key对比session存储key进行身份验证。
问题来了,请求服务,请求完成后,为了节约服务器资源,会断开连接,服务端如何识别是哪次请求的session呢?
这个时候就需要在第一次请求时,服务端返回sessionkey ,客户端再次请求时再请求头部使用此sessionkey表面身份,
在java端的方法如下:
因为一帮进行方法调用很少涉及到即时身份验证的。
例如:
1:客户端登录后服务端保存登录用户信息;
2:客户端持有验证通过key再次请求;
3:服务端得到key对比session存储key进行身份验证。
问题来了,请求服务,请求完成后,为了节约服务器资源,会断开连接,服务端如何识别是哪次请求的session呢?
这个时候就需要在第一次请求时,服务端返回sessionkey ,客户端再次请求时再请求头部使用此sessionkey表面身份,
在java端的方法如下:
public class WSHelper implements Runnable { private static ExecutorService pool = Executors.newSingleThreadExecutor(); private static final String TAG = "WSHelper"; // 设置webservices的超时时长 private static final int ACCESS_TIMEOUT = 15000; private static String sessionId ; private WSParams mPs; private WSCallBack mCallback; public static void setSessionId(String id){ sessionId = id; } private WSHelper( WSParams ps , WSCallBack callback){ mPs = ps; mCallback = callback; } //namespace:命名空间(http://www.ulife.com.cn/) //methodName:方法名称 //url:服务调用地址(http://192.168.0.250/WebService/UHomeStationService.asmx) //params:参数 public static Object callWebService(String nameSpace, String methodName, String url, Map<String, Object> params) {
final String soapAction = nameSpace + methodName; Log.e(TAG, "#开始调用WebServices → nameSpace= " + nameSpace + "; methodName= " + methodName + " url= " + url + "; sessionId="+ sessionId +"; params= " + params); // 1.创建数据对象 参数1:webServices命名空间 2:要访问的WebServices名称 SoapObject request = new SoapObject(nameSpace, methodName); // 2.创建信封对象 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; // .net 支持 envelope.bodyOut = request; // 添加输出参数 // 添加要传递的websercice的参数 if (params != null && !params.isEmpty()) { for (Iterator<Entry<String, Object>> it = params.entrySet().iterator(); it.hasNext();) { Map.Entry<String, Object> e = it.next(); request.addProperty(e.getKey(), e.getValue()); } } // 3.创建运输机对象对象 HttpTransportSE httpTransportSE = new HttpTransportSE( url , ACCESS_TIMEOUT ); httpTransportSE.debug = true; Object object = null; try { List<HeaderProperty> headers = null; if ( sessionId != null ){ headers = new ArrayList<HeaderProperty>(); headers.add(new HeaderProperty("Cookie" , "ASP.NET_SessionId=" + sessionId)); } // 4.开始请求WebServices 参数1为 Action地址 (命名空间 + WebServices名称) 参数2为 信封对象 httpTransportSE.call(soapAction, envelope , headers); // 5 .获得WebServices返回数据 object = envelope.getResponse(); } catch (Exception e) { e.printStackTrace(); } Log.e(TAG, "###WebServices → result = " + object); return object; } public static void callWS( WSParams ps , WSCallBack callback){ new Thread(new WSHelper(ps , callback)).start(); } public static void callWSSingleThread( WSParams ps , WSCallBack callback){ pool.execute(new WSHelper(ps , callback)); } public static boolean checkNetAndCallWS(Context context, WSParams ps, WSCallBack callback){ if ( NetUtil.checkNetwork(context)){ new Thread(new WSHelper(ps , callback)).start(); } else { Toast.makeText(context, R.string.wang_luo_bu_ke_yong, Toast.LENGTH_SHORT).show(); return false; } return true; } public static class WSParams { public WSParams(String nameSpace, String methodName, String url, Map<String, Object> params){ this.nameSpace = nameSpace; this.methodName = methodName; this.url = url; this.params = params; } public String nameSpace; public String methodName; public String url; public Map<String, Object> params; } public interface WSCallBack{ void callBack(Object obj); } @Override public void run() { try { Object obj = callWebService(mPs.nameSpace , mPs.methodName , mPs.url , mPs.params); if ( mCallback != null ) mCallback.callBack(obj); } catch (Exception e) { Log.e(TAG, "callback error!", e); } } public static String filterValue(Object value){ String str = null; if ( value != null ){ str = value.toString(); if ( "".equals(str) || "anyType{}".equals( str ) ) str = null ; } return str; } }
相关文章推荐
- 【javaweb:session】session域对象中保存的数据在什么范围内有效?一次会话!!
- javaweb之保存会话数据技术
- Java Web 学习笔记之二:Java HttpURLConnection保持会话的方法
- java多线程模拟有会话的访问web系统,并记录访问日志
- WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。
- java web服务器实现跨域访问
- 简单java Web Service服务端和Android客户端
- 客户端使用gsoap,访问基于jax-ws框架的java webservice
- JAVA WebService 服务端与动态客户端
- 黑马程序员--javaweb显示用户的访问时间
- JavaWeb 案例——访问权限控制
- android客户端 与javaweb服务端的简单理解
- 博科B300 BROCADE 300 WEB页面访问访问不能自动加载JAVA
- JavaWeb会话跟踪
- JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解
- java-web 第五讲 应用程序的部署 和 会话跟踪
- 如何用java代码访问远程web服务器(手写一个自己的httpClient)
- Java Web 项目简单配置 Spring MVC进行访问
- Web GIS访问ArcGIS安全认证服务代理配置解决方案-Java版本
- 导入JSON包,浏览器访问出现(org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53))