-- 作者:phoenixfmc
-- 发布时间:5/18/2006 3:55:00 PM
-- 请高手进啊!关于AXIS中SESSION的管理问题。
我是一名AXIS的初学者。最近在作一个练习的时候碰到了一个问题。我想在一个用户登陆验证后把这个用户的用户名存在服务器端的SESSION里,然后在客户端每次再调用SERVICE之前都判断一下,以此来限制权限。可是现在的问题是:第一次存在SESSION里的值在第二次访时得不到了。在看了CSDN上的那篇写SESSION的文章之后,我也在客户端和服务器端的配置文件中用AXIS自带的工具加入了一个Handler,在本机中的IE里也看到了返回的SOAP消息的Header中也自动地加入了SESSIONID的内容,可是第二次的ID值和第一次的ID值不一致,也是得不是第一次SESSION中存的那个值。现在将我的代码片断贴示如下: SERVICE:package fmc; import java.sql.ResultSet; import java.sql.SQLException; import javax.xml.soap.SOAPException; import org.apache.axis.session.Session; import org.apache.axis.MessageContext; public class ServiceTest { public boolean login(String username, String password) throws Exception { MessageContext mc = MessageContext.getCurrentContext(); Session conSession = mc.getSession(); mc.setMaintainSession(true); String sql = "select * from aa022 where aav001='" + sername + "' and aaw001='" + password + "'"; ResultSet result = OraJDBCTest.executeQuery(sql); if (result.next()) { conSession.set("username", username); conSession.set("password", password); OraJDBCTest.close(); return true; } else { return false; } } public boolean changeadminpwd(String oldpwd, String newpwd) throws SQLException, ClassNotFoundException, SOAPException { MessageContext mc = MessageContext.getCurrentContext(); Session conSession = mc.getSession(); mc.setMaintainSession(true); String password = (String) conSession.get("password"); String name = (String) conSession.get("username"); String sql = "select * from aa022 where aaw001='" + oldpwd + "' and aab002='" + name + "'"; ResultSet rs = OraJDBCTest.getRs(sql); if (rs.next()) { String sqlupdate = "update aa022 set aaw001='" + newpwd + "' where aab002='" + name + "' and aaw001='" + oldpwd + "'"; OraJDBCTest.executeUpdate(sqlupdate); OraJDBCTest.close(); return true; } else { return false; } } CLIENT: import java.net.MalformedURLException; import java.rmi.RemoteException; import org.apache.axis.client.Service; import org.apache.axis.client.Call; import client.ServiceTestServiceLocator; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; public class TestClient { Service service = new Service(); ServiceTestServiceLocator locator = new ServiceTestServiceLocator(); public void loginTest(String username,String password) { try { locator.setMaintainSession(true); /*ServiceTest_PortType st = locator.getServiceTest(); if(st.login(username, password)){ System.out.println("Ke Yi Deng Lu ! "); } else{ System.out.println("CUO WU ! QING CHONG SHI !"); }*/ Call call = (Call) service.createCall(); // call.setProperty(Call.SESSION_MAINTAIN_PROPERTY,Boolean.TRUE); //call.setProperty(Call.USERNAME_PROPERTY,username); //call.setProperty(Call.PASSWORD_PROPERTY,password); // call.setMaintainSession(true); //call.setUsername(username); //call.setPassword(password); String endpoint = "http://192.168.0.22:8899/MyService/services/Sessions?wsdl"; call.setOperationName(new QName(endpoint, "login")); call.setTargetEndpointAddress(new java.net.URL(endpoint)); //call.addParameter("fmc",org.apache.axis.Constants.XSD_STRING,javax.xml.rpc.ParameterMode.IN); //call.setReturnType(org.apache.axis.Constants.XSD_STRING); Object[] params = { username, password }; String obj = (String)call.invoke(params); System.out.println(obj); if (obj.equals("true")) { System.out.println("Ke Yi Deng Lu ! " + obj + " !"); } else if(obj.equals("false")){ System.out.println("CUO WU ! QING CHONG SHI !"); } } catch (Exception e) { e.printStackTrace(); } } public void changeTest(String oldpwd, String newpwd) throws ServiceException, MalformedURLException, RemoteException { locator.setMaintainSession(true); /*ServiceTest_PortType st = locator.getServiceTest(); if(st.changeadminpwd(oldpwd, newpwd)){ System.out.println("Xiu Gai Cheng Gong ! "); } else{ System.out.println("CUO WU ! CHONG SHI !"); }*/ Call call = (Call) service.createCall(); //call.setMaintainSession(true); String endpoint = "http://192.168.0.22:8899/MyService/services/Sessions?wsdl"; call.setOperationName(new QName(endpoint, "changeadminpwd")); call.setTargetEndpointAddress(new java.net.URL(endpoint)); // call.addParameter("fmc",org.apache.axis.Constants.XSD_STRING,javax.xml.rpc.ParameterMode.IN); // call.setReturnType(org.apache.axis.Constants.XSD_STRING); Object[] params = { oldpwd, newpwd }; String obj = (String) call.invoke(params); // System.setProperty("org.xml.sax.driver", // "org.apache.xerces.parsers.SAXParser"); System.out.println(obj); if (obj.equals("true")) { System.out.println("XIU GAI CHENG GONG ! " + obj + " !"); } if (obj.equals("false")) { System.out.println("CUO WU ! QING CHONG SHI !"); } } public static void main(String[] args) throws MalformedURLException, RemoteException, ServiceException { TestClient tc = new TestClient(); tc.loginTest("admin", "phoenix"); tc.changeTest("phoenix", "admin"); } } 两个配置文件: 1、server-config.xml <?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <globalConfiguration> <parameter name="sendMultiRefs" value="true"/> <parameter name="disablePrettyXML" value="true"/> <parameter name="adminPassword" value="admin"/> <parameter name="attachments.Directory" value="D:\java\tomcat50-jwsdp\webapps\axis\WEB-INF\attachments"/> <parameter name="dotNetSoapEncFix" value="true"/> <parameter name="enableNamespacePrefixOptimization" value="false"/> <parameter name="sendXMLDeclaration" value="true"/> <parameter name="sendXsiTypes" value="true"/> <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/> <requestFlow> <handler type="java:org.apache.axis.handlers.JWSHandler"> <parameter name="scope" value="Session"/> </handler> <handler type="java:org.apache.axis.handlers.JWSHandler"> <parameter name="scope" value="Session"/> <parameter name="extension" value=".jwr"/> </handler> </requestFlow> </globalConfiguration> <handler name="session" type="java:org.apache.axis.handlers.SimpleSessionHandler"/> <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/> <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/> <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/> <service name="AdminService" provider="java:MSG"> <parameter name="allowedMethods" value="AdminService"/> <parameter name="enableRemoteAdmin" value="false"/> <parameter name="className" value="org.apache.axis.utils.Admin"/> <namespace>http://xml.apache.org/axis/wsdd/</namespace> <namespace>http://xml.apache.org/axis/wsdd/</namespace> </service> <service name="Version" provider="java:RPC"> <parameter name="allowedMethods" value="getVersion"/> <parameter name="className" value="org.apache.axis.Version"/> </service> <service name="Sessions" provider="java:RPC" style="wrapped" use="literal"> <requestFlow> <handler type="session"/> </requestFlow> <responseFlow> <handler type="session"/> </responseFlow> <parameter name="allowedMethods" value="*"/> <parameter name="className" value="fmc.ServiceTest"/> <namespace>urn:fmc:Sessions</namespace> </service> <service name="ServiceTest" provider="java:RPC"> <parameter name="allowedMethods" value="*"/> <parameter name="className" value="fmc.ServiceTest"/> </service> <transport name="http"> <requestFlow> <handler type="URLMapper"/> <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/> </requestFlow> <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/> <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/> <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/> <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/> <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/> <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/> </transport> <transport name="local"> <responseFlow> <handler type="LocalResponder"/> </responseFlow> </transport> </deployment> 2、client-config.xml <?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <globalConfiguration> <parameter name="adminPassword" value="admin"/> <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/> <parameter name="sendMultiRefs" value="true"/> <parameter name="sendXsiTypes" value="true"/> <parameter name="sendXMLDeclaration" value="true"/> <parameter name="axis.sendMinimizedElements" value="true"/> <requestFlow> <handler type="java:org.apache.axis.handlers.SimpleSessionHandler"/> </requestFlow> <responseFlow> <handler type="java:org.apache.axis.handlers.SimpleSessionHandler"/> </responseFlow> </globalConfiguration> <handler name="session" type="java:org.apache.axis.handlers.SimpleSessionHandler"/> <service name="Sessions" provider="java:RPC" style="wrapped" use="literal"> <requestFlow> <handler type="session"/> </requestFlow> <responseFlow> <handler type="session"/> </responseFlow> <parameter name="allowedMethods" value="*"/> <parameter name="className" value="fmc.ServiceTest"/> <namespace>urn:fmc:Sessions</namespace> </service> <transport name="java" pivot="java:org.apache.axis.transport.java.JavaSender"/> <transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/> <transport name="local" pivot="java:org.apache.axis.transport.local.LocalSender"/> </deployment> 我用的开发工具是: Eclipse JBossIDE 3.1 Tomcat 5.0.28 和 tomcat50-jwsdp AXIS1.3 JDK1.5 和 jwsdp-1.4 请各位高手帮忙啊!!!!!小弟感激不尽啊!!! 我每天都会到这个论坛来看看的。谢谢各位高手了!!!!!!!
|