为什么pwcb.getPassword在此代码中为null

时间:2013-05-08 14:52:03

标签: axis2 rampart

我尝试使用rampart模块将wallart安全性添加到我的axis2 Web服务。

所以这就是我所做的:

  1. 我在数据库中存储了散列值“bobWWW”密码和salt
  2. 在我的PWCBHandler.java类

    •我选择存储在数据库中的密码和哈希

    •我尝试使用相同的算法pwcb.getPassword()使用相同的存储盐进行哈希

    •检查这个新的哈希密码是否等于存储的密码

    但是我一直在接收nullpointerexception,所以我决定检查并编写这段代码

    if(pwcb.getPassword()==null)
    {
       try {
            throw new Exception ("passwordget pass null" +pwcb.getPassword());
            } 
            catch (Exception e) 
            {
               // TODO Auto-generated catch block
            e.printStackTrace();
             }
    }
    

    我看到pwcb.getPassword()为空。所以这是PWCBHandler.java的代码

    public void handle(Callback[] callbacks)   throws IOException,  UnsupportedCallbackException 
      {
    
          for (int i = 0; i < callbacks.length; i++) 
           {          
                WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
                try {
                  pasandsalt = getdataforChecking();
    
    
    
                if(pwcb.getPassword()==null)
                {
    
                    try {
                        throw new Exception ("passwordget pass null" +pwcb.getPassword());
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
    
    
    
                try {
                    passwordforchecking = hash(pwcb.getPassword(),Base64.decodeBase64(pasandsalt[1]));
    
    
                } catch (Exception e) {
    
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
    
    
    
    
                 if((pwcb.getIdentifier().equals("bob")) && (passwordforchecking.equals(pasandsalt[0])) ) 
                 {
                    return;
    
                 } 
             }
    

    这是我的soaprequest与sequ​​eiry标题

     var sr =  
                    "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                    "<soapenv:Envelope " + 
    
                     "xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
                     "xmlns:nilo=\"http://nilo\">"+
                      "<soapenv:Header>"+
                      '<wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" soapenv:mustUnderstand="1">'+
                      '<wsse:UsernameToken xmlns:wsu="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="123">'+
                      '<wsse:Username>bob</wsse:Username>'+
                      '<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">bobWWW</wsse:Password>'+
                      '</wsse:UsernameToken>'+
                      '</wsse:Security>'+
                      "</soapenv:Header>"+
                      "<soapenv:Body>" +
                      "<nilo:getdataForChecking>" +
                      '<nilo:data>'+tranXml+'</nilo:data>' +
    
                       ' </nilo:getdataForChecking>'+
    
                        '</soapenv:Body>' +
    
    
    
                      '</soapenv:Envelope>';
    

1 个答案:

答案 0 :(得分:0)

根据您的肥皂标题,我可以看到您使用的是纯文本密码而不是密码摘要。您可能需要更改rampart配置

<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">bobWWW</wsse:Password>

这可能对您有所帮助。 http://wso2.com/library/240/