在WebService中如何创建自己的拦截器拦截SOAP消息

来源:互联网 发布:网络兼职被骗报警程序 编辑:程序博客网 时间:2024/06/04 18:19

使用自己自己创建的拦截器完成权限的判定,即用户名和密码是否正确

服务器端主要是验证用户名和密码

以下的代码主要是Web  Service的服务端

package lee;
import java.io.IOException;

public class ServerMain {
public static void main(String[] args) throws IOException{

HelloWorld hello=new HelloWorldWS();
//发布WebService
EndpointImpl endpoint=(EndpointImpl) Endpoint.publish("http://IP/webservie" ,hello);

/*
* 创建我们自己的拦截器AuthInterceptor该拦截器的功能
* 主要就是验证用户名和密码是否正确
* */
endpoint.getInInterceptors().add(new AuthInterceptor());
}
}

我们需要创建自己的拦截器AuthInterceptor这个拦截器会将SOAP消息到达服务器之前拦截该消息


public class AuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> {

    public AuthInterceptor(){

        super(Phase.PRE_INVOKE);    

     }

@Override

   public void handleMessage(SoapMessage msg) throws Fault {

     //这个参数msg就是我们拦截到的SOAP消息,我们需要解析Header

    List<Header> headers=msg.getHeaders(); 得到所有的Header

   if(headers==null || headers.size()<0){

      throw new Fault(new IllegalArgumentException("根本没有Header,不能调用"));

      }

   Header firstHeader=headers.get(0); //得到headers的第一个元素

  Element ele=(Element) firstHeader.getObject();

  NodeList userIds=ele.getElementsByTagName("userId");
 NodeList userpass=ele.getElementsByTagName("userPass");

if(userIds.getLength()!=1){
throw new Fault(new IllegalArgumentException("用户名格式不对"));
}
if(userpass.getLength()!=1){
throw new Fault(new IllegalArgumentException("密码格式不对"));
}

String userId=userIds.item(0).getTextContent();
String userPass=userpass.item(0).getTextContent();
//实际项目中调用数据库
if(!userId.equals("yy")||!userPass.equals("yy")){
throw new Fault(new IllegalArgumentException("用户名或者密码不正确"));
}

}

   }

}


客户端的代码就是讲用户名和密码的信息加到Header中

package lee;
import yy.Cat;
public class ClientMain {


/**
* @param args
*/
public static void main(String[] args) {


HelloWorldWS factory =new HelloWorldWS();
//返回的是客户端的代理
HelloWorld hw=factory.getHelloWorldWSPort();

Client client=ClientProxy.getClient(hw);
client.getOutInterceptors().add(new AddHeaderInterceptor("yy","yy"));
client.getOutInterceptors().add(new LoggingOutInterceptor());



System.out.println(hw.sayHi("孙悟空"));
User user=new User();
user.setName("sun");
user.setPass("2233");
List<Cat> list=hw.getCatsByUser(user);
for(Cat cat:list){
System.out.println(cat.getName()+"  "+cat.getColor());
}

StringCat sc=hw.getAllCats();
for (Entry entry:sc.getEntries()){
System.out.println(entry.getKey()+"   "+entry.getValue().getName());
}
}
}

package yy.auth;


import java.util.List;




public class AddHeaderInterceptor extends AbstractPhaseInterceptor<SoapMessage> {


private String userId;
private String userPass;

public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
public AddHeaderInterceptor(String userId,String userPass){
super(Phase.PREPARE_SEND);//在序列化之前的拦截 SOAP
this.userId=userId;
this.userPass=userPass;
}
@Override
public void handleMessage(SoapMessage msg) throws Fault {
Document document=DOMUtils.createDocument();
Element ele=document.createElement("authHeader");
Element id=document.createElement("userId");
Element pass=document.createElement("userPass");
id.setTextContent(userId);
pass.setTextContent(userPass);
ele.appendChild(id);
ele.appendChild(pass);
/*
* <authHeader>
*    <userId></userId>
*    <userPass></userPass>
* </authHeader>
* */
Header header=new Header(new QName("yy"),ele);
List<Header> headers=msg.getHeaders();
headers.add(header);


}


}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 改了无线网密码还是上不去网怎么办 买的京东e卡丢了怎么办 已认证未抵扣的发票发生退货怎么办 办的消费卡不给退怎么办 银行卡密码忘了手机号也换了怎么办 公务卡在当当购物的刷卡单怎么办 杭州市网签提示住宅均价异常怎么办 吃鸡账号没有绑定手机就买了怎么办 微信绑定的银行卡密码错误怎么办 淘宝单张券已领取达上限怎么办 去办公室给领导送礼总有人怎么办 招行信用卡临时额度到期后怎么办 中银e令不想用了怎么办 中银e令密码忘了怎么办 银行卡预留手机号改了支付宝怎么办 手机一直收到支付验证码短信怎么办 微信绑定银行卡手机号码换了怎么办 银行卡网银登录输错密码锁了怎么办 中行信用卡主付卡的付卡怎么办停 在苏宁网购的移动空调要退货怎么办 单位发的购物卡掉了怎么办 支付宝ofo退押金后余额怎么办 e招贷分期多还了怎么办 别人用我的手机号贷款不还怎么办 电脑文件夹怎么设密码忘记了怎么办 苹果手机id有分机和主机怎么办 绝地求生号被盗了邮箱被改了怎么办 微信邮箱怎么接收不到验证码怎么办 要申请一个特定的qq邮箱号怎么办 中银e贷额度为0怎么办 中银e贷被冻结了怎么办 中国银行e贷款填错了被拒怎么办 中银e贷逾期2天怎么办 大学生助学贷款网站密码忘了怎么办 乳晕毛囊挤压捏起来有小硬节怎么办 手机版模拟人生孕妇任务卡死怎么办 百度网盘的表格没保存怎么办 爱奇艺买的会员不小心删了怎么办 多次举报和拉黑克隆不了好友怎么办 货车把货拉到货主不付钱怎么办 中国银行网银公司用户名忘了怎么办