Webservice:CXF添加拦截器实现权限控制

上一遍简单介绍了webservice和写了简单的cxf入门小程序

地址:http://blog.csdn.net/cjaver/article/details/38777057



接下来介绍一个比较实用的拦截器,可以进行权限控制等。

首先对于 一个 webservice来说

服务器端 : 有输入有输出(soap)

客户端: 同上


所以对于添加拦截器来说,也是有 In 拦截器   跟  Out拦截器


这里简单写一个服务器端的 In拦截器(控制发送过来的消息必须有 用户名,密码,所以添加的In拦截器)

public class AuthIntercetor extends AbstractPhaseInterceptor<SoapMessage> {

	public AuthIntercetor() {
		super(Phase.PRE_INVOKE);//调用之前
	}

	@Override
	/***
	 *  参数是message是soap 协议的内容
	 */
	public void handleMessage(SoapMessage message) throws Fault {
		System.out.println("自定义拦截器工作...");
		//获得header   
		List<Header> headers = message.getHeaders();
		if(headers==null || headers.size()<1){
		   throw new Fault(new IllegalArgumentException("没有Header,不给你调用,哈哈哈..."));
		}
		
		//这里假设约定第一个header为用户名 密码
		Header header  =  headers.get(0);
		Element element = (Element) header.getObject();
		String user =  element.getElementsByTagName("userid").item(0).getTextContent();
		String pass =  element.getElementsByTagName("pass").item(0).getTextContent();
		
		if(!"wang".equals(user) || !"111".equals(pass)){
			throw new Fault(new IllegalArgumentException("用户名或者密码不正确,不能调用..."));
		}
	}
	
}
在SOAP中,body部分是不能认为修改的,所以要权限控制什么的,只能修改header头信息

上如只是简单演示获取客户端传过来的soap中的header并且进行比较  

  如果不满足条件则,抛出一个 Fault ,CXF中的一个类,从而阻止客户端调用。


发布的时候添加  In拦截器

public class Publish {
	public static void main(String[] args) {
		ITimeService iTimeService = new TimeServiceImpl();
		EndpointImpl endpointImpl =  (EndpointImpl) Endpoint.publish("http://localhost:9999/time", iTimeService);
		endpointImpl.getInInterceptors().add(new AuthIntercetor());
		//endpointImpl.getOutInterceptors().add(new LoggingInInterceptor());
		System.out.println("Web service接口暴露成功...");
	}
}


对于客户端来说也是如此


可以写一个 Out拦截器,对发送出去消息添加header头 ,在这里就不再赘述了,大家有什么问题可以留言。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值