新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     >>计算机科学论坛<<     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> Web服务(Web Services,WS), 语义Web服务(Semantic Web Services, SWS)讨论区: WSDL, SOAP, UDDI, DAML-S, OWL-S, SWSF, SWSL, WSMO, WSML,BPEL, BPEL4WS, WSFL, WS-*,REST, PSL, Pi-calculus(Pi演算), Petri-net,WSRF,
    [返回] 计算机科学论坛W3CHINA.ORG讨论区 - Web新技术讨论『 Web Services & Semantic Web Services 』 → 请高手进啊!关于AXIS中SESSION的管理问题。 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 10917 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 请高手进啊!关于AXIS中SESSION的管理问题。 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     phoenixfmc 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:8
      积分:99
      门派:XML.ORG.CN
      注册:2006/4/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给phoenixfmc发送一个短消息 把phoenixfmc加入好友 查看phoenixfmc的个人资料 搜索phoenixfmc在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看phoenixfmc的博客楼主
    发贴心情 请高手进啊!关于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
    请各位高手帮忙啊!!!!!小弟感激不尽啊!!!
    我每天都会到这个论坛来看看的。谢谢各位高手了!!!!!!!


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/5/18 15:55:00
     
     octavian 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:1
      积分:60
      门派:XML.ORG.CN
      注册:2006/4/24

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给octavian发送一个短消息 把octavian加入好友 查看octavian的个人资料 搜索octavian在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看octavian的博客2
    发贴心情 
    [B]server-config.wsdd :
    <service name="Sessions".......>
      <requestFlow>
       <handler type="session">
    在这里是不是要接收session id的值(SimpleSessionHandler的某个属性)?? 比如:
       <parameter name="sessionId" value="org.apache.axis.handler.SimpleSessionHandler.SESSION ID" >
       </handler>
      </requestFlow>
    .........
    </service>
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/6/23 22:25:00
     
     phoenixfmc 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:8
      积分:99
      门派:XML.ORG.CN
      注册:2006/4/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给phoenixfmc发送一个短消息 把phoenixfmc加入好友 查看phoenixfmc的个人资料 搜索phoenixfmc在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看phoenixfmc的博客3
    发贴心情 
    这个方法试了,不过还是没有解决问题。还是老样子。大家能不能再想想办法了?要是以后用这个东东,一定会碰到这个问题的。如果那位已经解决了这个问题,就请赐教吧,除了得分之外,我还会感恩带德的。谢谢啦!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/6/26 13:26:00
     
     phoenixfmc 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:8
      积分:99
      门派:XML.ORG.CN
      注册:2006/4/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给phoenixfmc发送一个短消息 把phoenixfmc加入好友 查看phoenixfmc的个人资料 搜索phoenixfmc在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看phoenixfmc的博客4
    发贴心情 
    没人再来研究这个问题了吗?头痛啊!!!来个高手帮帮我吧!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/6 12:48:00
     
     octavian 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:1
      积分:60
      门派:XML.ORG.CN
      注册:2006/4/24

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给octavian发送一个短消息 把octavian加入好友 查看octavian的个人资料 搜索octavian在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看octavian的博客5
    发贴心情 
    你为什么在客户端(TestClient)不写setMaintainSession呢?
    我看了Axis的FAQ,在Server端用MessageContext.setMaintainSession()
    在client端,用org.apache.axis.client.Service.setMaintainSession()
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/6 18:34:00
     
     phoenixfmc 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:8
      积分:99
      门派:XML.ORG.CN
      注册:2006/4/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给phoenixfmc发送一个短消息 把phoenixfmc加入好友 查看phoenixfmc的个人资料 搜索phoenixfmc在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看phoenixfmc的博客6
    发贴心情 
    写了,能不写吗?都试过的。可是写也没用啊,还是找不到啊。所以才着急呢!!!对了,要是客户端用delphi作是不是能简单一点呢?不知道delphi对这个问题有没有什么好的解决办法。请高手指点一下。
    谢谢!!!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/7 9:03:00
     
     xpf7622 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:58
      注册:2003/12/4

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xpf7622发送一个短消息 把xpf7622加入好友 查看xpf7622的个人资料 搜索xpf7622在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xpf7622的博客7
    发贴心情 
    在服务端根本不用调用什么setMaintance,这说明你没有看明白网上:Manage session in Axis那篇文章.
    客户端:

    SimpleSessionHandler sesshandler = new SimpleSessionHandler();
            
            //调用SendDatainfo服务
            Call call = (Call) service.createCall();
            call.setClientHandlers(sesshandler, sesshandler);
    试试这个,我的就是用这个成功的.
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/9/18 9:51:00
     
     phoenixfmc 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:8
      积分:99
      门派:XML.ORG.CN
      注册:2006/4/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给phoenixfmc发送一个短消息 把phoenixfmc加入好友 查看phoenixfmc的个人资料 搜索phoenixfmc在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看phoenixfmc的博客8
    发贴心情 
    谢谢二位了。我会按照二位说的都试试。可我在用delphi作的客户端调用时,服务器端的SESSION竟然能存住值了。呵呵,我也没改什么代码。真是有点意思。这些天真的很忙,呵呵,才看到回复。不好意思。下面结贴了,给分。呵呵。再次表示感谢!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/9/25 13:22:00
     
     kevin_78 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:11
      积分:103
      门派:XML.ORG.CN
      注册:2007/3/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给kevin_78发送一个短消息 把kevin_78加入好友 查看kevin_78的个人资料 搜索kevin_78在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看kevin_78的博客9
    发贴心情 
    来个高手帮帮
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/3/14 13:22:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Web Services & Semantic Web Services 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/7/18 13:40:56

    本主题贴数9,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    218.750ms