加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 23:23:50 所属栏目:安全 来源:网络整理
导读:上一遍简单介绍了webservice和写了简单的cxf入门小程序 地址:http://blog.csdn.net/cjaver/article/details/38777057 接下来介绍一个比较实用的拦截器,可以进行权限控制等。 首先对于 一个 webservice来说 服务器端 : 有输入有输出(soap) 客户端:

上一遍简单介绍了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头 ,在这里就不再赘述了,大家有什么问题可以留言。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读