解决方案 »

  1.   

    token 为啥不持久化保存呢
      

  2.   

    这里验证就是除了login方法外 其它方法调用都需要验证 只有login方法不需要验证 网上找了下 所有验证soapheader的资料都是:public void invoke(MessageContext cfx) throws Exception {
    if (cfx.getInMessage().getHeader() == null) {
    throw new org.codehaus.xfire.fault.XFireFault("请求必须包含验证信息",
    org.codehaus.xfire.fault.XFireFault.SENDER);
    }
    Element token = cfx.getInMessage().getHeader()
    .getChild("Authentication");
    if (token == null) {
    throw new org.codehaus.xfire.fault.XFireFault("请求必须包含身份验证信息",
    org.codehaus.xfire.fault.XFireFault.SENDER);
    }
    String username = token.getChild("Username").getValue();
    String password = token.getChild("Password").getValue(); try {
    // 进行身份验证 ,只有test@test的用户为授权用户
    if (username.equals("test") && password.equals("test"))
    System.out.println("身份验证通过");
    else
    throw new Exception();
    } catch (Exception e) {
    throw new org.codehaus.xfire.fault.XFireFault("非法的用户名和密码",
    org.codehaus.xfire.fault.XFireFault.SENDER);
    } }
    问题是这样验证 那么连login方法也需要验证了我是要求login方法不需要验证 相当于web里的 登录不需要检查session 只有登录成功了才会生成session 并可以验证
      

  3.   


    你所说的token持久化是指webservice将token保存到数据库中?
      

  4.   


    你所说的token持久化是指webservice将token保存到数据库中?是的
      

  5.   

    再说明一点需求:现在要做一个有身份认证的webservice 暴露在外无需认证的只有一个login(username,password)方法 客户端要调用之前需要先login 当login成功后服务器端会返回一个唯一标识token 在会话期内客户端再调用其它方法时只需要将token放到soapheader中就可以了 服务器端会在session中查找是否有token这个标识 有则可以调用 无则拒绝。