自定義攔截器,驗證用戶名密碼
一、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("用戶名或密碼錯誤." ));
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.