自定義攔截器,驗證用戶名密碼

一、client端

     1、定義一個構造方法:
     
     public AddHeaderInterceptor(String userId, String password){
          super(Phase.PREPARE_SEND);
          this.userId = userId;
          this.password = password;
     }

     2、重寫handleMessage

     public void handleMessage(SoapMessage msg) throws Fault {
          List<Header> headers = msg.getHeaders();
          
          Document document = DOMUtils. createDocument();
          Element element = document.createElement("root" );
          
          Element userElement = document.createElement("userName" );
          Element passwordElement = document.createElement("password" );
          
          userElement.setTextContent( userName);
          passwordElement.setTextContent( password);
          
          element.appendChild(userElement);
          element.appendChild(passwordElement);
          
          headers.add( new SoapHeader(new QName("authority" ), element));
     }

     xml爲:

     <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
     <soap:Header>
          <root>
               <userName>songchengye</userName>
               <password>123456</password>
          </root>
     </soap:Header>

     <soap:Body>
          <ns2:getMyName xmlns:ns2="http://service.ws.polo.song.com/">
               <arg0>songchengye</arg0>
          </ns2:getMyName>
     </soap:Body>

     </soap:Envelope>

     3、服務器端handleMessage

    public void handleMessage(SoapMessage message) throws Fault {
         List<Header> headers = message.getHeaders();
          if(null ==headers || headers.isEmpty()){
              throw new Fault(new IllegalArgumentException("header is empty." ));
         }
         Header header = headers.get(0);
         Element element = (Element) header.getObject();
         
         NodeList userIds = element.getElementsByTagName("userName" );
         NodeList passwords = element.getElementsByTagName("password" );
         
     if(null == userIds || null == passwords || userIds.getLength() < 1 || passwords.getLength() < 1)     {
              throw new Fault(new IllegalArgumentException("用戶名、密碼格式不對." ));
         }
         
         String username = userIds.item(0).getTextContent();
         String password = passwords.item(0).getTextContent();
         
          if(null != username && username.equals("songchengye" )
                 && null != password && password.equals("123456" )){
              return;
         } else {
              throw new Fault(new IllegalArgumentException("用戶名或密碼錯誤." ));
         }
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章