上一遍简单介绍了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中的一个类,从而阻止客户端调用。
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接口暴露成功..."); } }
对于客户端来说也是如此
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。