java 拦截器安全证书_webservice 自定义拦截器实现安全认证

webservice 自定义拦截器实现安全认证

服务器端验证拦截器:

package com.mscncn.ws.sayhi.interceptor;

import javax.xml.namespace.QName;

import org.apache.cxf.binding.soap.SoapMessage;

import org.apache.cxf.headers.Header;

import org.apache.cxf.interceptor.Fault;

import org.apache.cxf.phase.AbstractPhaseInterceptor;

import org.apache.cxf.phase.Phase;

import org.w3c.dom.Element;

public class CheckUserInterceptor extends AbstractPhaseInterceptor {

public CheckUserInterceptor() {

super(Phase.PRE_PROTOCOL);

}

public void handleMessage(SoapMessage msg) throws Fault {

Header header=msg.getHeader(new QName("mscncn"));

if(header!=null){

Element rootEle=(Element) header.getObject();

String name=rootEle.getElementsByTagName("name").item(0).getTextContent();

String password=rootEle.getElementsByTagName("password").item(0).getTextContent();

if(name.equals("zs")&&password.equals("123456")){

System.out.println(" Service 通过了拦截器");

}

}

//没有通过

System.out.println("Service 没有通过拦截器");

}

}

服务器端注册拦截器:

public static void main(String[] args) {

String address="http://192.168.70.51:1111/day01_ws/hellows";

Endpoint point=Endpoint.publish(address, new HelloWSImpl());

EndpointImpl endpointImpl=(EndpointImpl)point;

List> inTerceptors=endpointImpl.getInInterceptors();

inTerceptors.add(new CheckUserInterceptor());

System.out.println("web service 发布成功!");

}

客户端拦截器:

package com.mscncn.ws.sayhi.interceptor;

import java.util.List;

import javax.xml.namespace.QName;

import org.apache.cxf.binding.soap.SoapMessage;

import org.apache.cxf.headers.Header;

import org.apache.cxf.interceptor.Fault;

import org.apache.cxf.phase.AbstractPhaseInterceptor;

import org.apache.cxf.phase.Phase;

import org.apache.xml.utils.DOMHelper;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

public class AddUserInterceptor extends AbstractPhaseInterceptor {

private String name;

private String password;

/**

* @param phase  拦截器什么时候被调用

*/

public AddUserInterceptor() {

super(Phase.PRE_PROTOCOL);//准备协议化时拦截

}

public AddUserInterceptor(String name,String password){

super(Phase.PRE_PROTOCOL);//准备协议化时拦截

this.name=name;

this.password=password;

}

@Override

public void handleMessage(SoapMessage msg) throws Fault {

/*

tom

*/

List headers=msg.getHeaders();//获取所有的头

Document document=DOMHelper.createDocument();

Element rootEle=document.createElement("mscncn");

Element nameEle=document.createElement("name");

Element passwordEle=document.createElement("name");

nameEle.setTextContent(name);

passwordEle.setTextContent(password);

rootEle.appendChild(nameEle);

rootEle.appendChild(passwordEle);

headers.add(new Header(new QName("mscncn"), rootEle));

System.out.println("client handleMessage()......");

}

}

客户端注册拦截器:

public static void main(String[] args) {

HelloWSImplService wsImplService=new HelloWSImplService();

HelloWS ws=wsImplService.getHelloWSImplPort();

Client client=ClientProxy.getClient(ws);

List> outTerceptors=client.getInInterceptors();

outTerceptors.add(new AddUserInterceptor("zs","123456"));

System.out.println("client :"+ws.sayHello("tom cat"));

}

}

CXF中的拦截器分为in拦截器和out拦截器,又有客户端拦截器和服务端拦截器。

拦截器使用流程:客户端(out)-> 服务端(in)->处理业务->服务端(out)->客户端(in),并不是每一步都需要拦截器。在这里我们用到的是客户端Out拦截器和服务端in拦截器。服务端in拦截器检查用户级权限,客户端out浏览器发送用户信息给服务端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值