以前总是认为,通过CS端调用的时候并不能保留下相应的cookie信息,理所当然,服务器就无法保持客户端的sessionID,但后来发现,在基于.net调用时,.net为我们提供了cookieContainter
要想在C/S端保存相应信息,我们加下如下代码
在服务器端,可以使用如下代码来设置session
可以用以下代码获取session,并通过JDK 动态代理来进行访问控制
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.apache.log4j.Logger;
import org.codehaus.xfire.fault.XFireFault;
import org.codehaus.xfire.transport.http.XFireServletController;
public class AuthenticationHandler implements InvocationHandler {
private Object targetObj;
private Logger log = Logger.getLogger(AuthenticationHandler.class);
public Object newProxy(Object targetObj) {
this.targetObj = targetObj;
log.info("Proxy class:" + this.targetObj.getClass().getName());
return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(),
targetObj.getClass().getInterfaces(), this);
}
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
log.info("methord name:" + arg1.getName());
Object result = null;
if (XFireServletController.getRequest().getSession().getAttribute(
"userToken") != null) {
try {
log.info("this method has been invoke:" + arg2);
result = arg1.invoke(targetObj, arg2);
} catch (Exception ex) {
log.equals(ex);
ex.printStackTrace();
}
} else {
throw new XFireFault("Authentication Failed. Login First",
XFireFault.SENDER);
}
log.info("invoke result:" + result);
return result;
}
}
Over,东西比较粗糙,细节的地方大家可以多交流交流。。。嘿嘿,在.net发布的webservice里面,你还需要在webmethod 加入一个(EnableSession=true)的属性