CXF-06:Web Service暴露后如何进行权限控制,CXF拦截器的理论以及如何为CXF的客户端和服务器端添加拦截器
来源:互联网 发布:秃鹰配件名称及数据 编辑:程序博客网 时间:2024/05/21 22:41
Web Service暴露后所有人都可以调用,如何进行权限控制?
解决思路是:服务器端要求input消息总是携带有用户名、密码信息,————如果没有或不正确,拒绝调用。
* 如果不用CXF等框架,SOAP消息的生成、解析都是程序员负责的,因此无论是添加用户名、密码信息,还是提取用户名、密码信息,都可由程序员的代码完成;
* 如果用CXF等框架,SOAP消息的生成、解析都是CXF等框架来完成的,为了让程序员能访问并修改CXF框架所生成的SOAP消息,CXF提供了拦截器;
* 服务器端添加拦截器:
解决思路是:服务器端要求input消息总是携带有用户名、密码信息,————如果没有或不正确,拒绝调用。
* 如果不用CXF等框架,SOAP消息的生成、解析都是程序员负责的,因此无论是添加用户名、密码信息,还是提取用户名、密码信息,都可由程序员的代码完成;
* 如果用CXF等框架,SOAP消息的生成、解析都是CXF等框架来完成的,为了让程序员能访问并修改CXF框架所生成的SOAP消息,CXF提供了拦截器;
* 服务器端添加拦截器:
* 1 . 获取Endpoint的publish方法返回值;
* 2 . 调动该方法的返回值的 getInInterceptors()、getOutInterceptors() 方法获取In、Out拦截器列表,接下来添加拦截器;在本文里不写自己的拦截器,CXF已经提供了很多拦截器,但CXF的API文档中一些类是没有的,查文档查不到但实际上是有的。
操作 - 在暴露Web Service的main接口里直接修改代码增加拦截:
import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import javax.xml.ws.Endpoint;import org.fjava.cxf.ws.HelloWorld;import org.fjava.cxf.ws.impl.HelloWorldWs;import org.apache.cxf.interceptor.LoggingInInterceptor;import org.apache.cxf.interceptor.LoggingOutInterceptor;import org.apache.cxf.jaxws.EndpointImpl;//发布Web Servicepublic class ServiceMain {public static void main(String[] args) throws IOException{HelloWorld hw = new HelloWorldWs();//调用Endpoint的publish("本机地址","服务的提供者:一个Web Service对象")方法发布Web Service//注:若导入的包报错或无此类,则是jar包没有Build Path,选中所有jar包->右击->选中Build Path->Add to build Path//或右击项目->Properties->Java Build Path->Libraries->Add JARs->选则本项目lib下的所有显示jar包->OK->OKEndpointImpl ep = (EndpointImpl) Endpoint.publish("http://192.168.0.159:6786/sayHello", hw);//添加In拦截器//in.txt文件位置:该项目的路径//因为IO缓存问题没有刷新出来,文件里暂时没有内容ep.getInInterceptors().add(new LoggingInInterceptor(new PrintWriter(new FileWriter("in.txt"))));//添加Out拦截器//LoggingInInterceptor()把传入的消息以日志的形式记录下来,如果是空参数则打印到控制台ep.getOutInterceptors().add(new LoggingOutInterceptor());System.out.println("Web Service暴露成功!");//暴露成功后可以被任何平台的任何语言调用//检查调用地址http://192.168.*.*/sayHello?wsdl}}返回结果:
后台输出信息:
十月 15, 2016 11:22:49 下午 org.apache.cxf.interceptor.AbstractLoggingInterceptor log信息: Outbound Message---------------------------ID: 3Encoding: UTF-8Content-Type: text/xmlHeaders: {}Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:getAllFoodsResponse xmlns:ns2="http://ws.cxf.fjava.org/"><return><entries><key>蟹王汉堡</key><value><describe>橙色,亮金色,我的宝贝,我的爱!</describe><id>3</id><name>蟹王汉堡</name></value></entries><entries><key>海绵金币</key><value><describe>吃着金币样的甜甜饼,想着海绵宝宝赚的钱被扣了,哈哈哈,爽气!</describe><id>4</id><name>海绵金币</name></value></entries><entries><key>一个汉堡</key><value><describe>是三层的,有夹层哦!</describe><id>1</id><name>一个汉堡</name></value></entries><entries><key>火腿肠</key><value><describe>这是章鱼哥从岸上偷运来的,据说很美味!</describe><id>2</id><name>火腿肠</name></value></entries></return></ns2:getAllFoodsResponse></soap:Body></soap:Envelope>--------------------------------------
* 客户端添加拦截器:
* 1 . 调用ClientProxy的getClient()方法,调用该方法以远程Web Service的代理为参数;
* 2 . 调用Client对象的getInInterceptors()、getOutInterceptors()方法来获取In、Out拦截器列表;
client.getInInterceptors().add(new LoggingInInterceptor());
client.getOutInterceptors().add(new LoggingOutInterceptor());
import java.util.List;import org.apache.cxf.endpoint.Client;import org.apache.cxf.frontend.ClientProxy;import org.apache.cxf.interceptor.LoggingInInterceptor;import org.apache.cxf.interceptor.LoggingOutInterceptor;import org.fjava.cxf.ws.Cat;import org.fjava.cxf.ws.Entry;import org.fjava.cxf.ws.Food;import org.fjava.cxf.ws.HelloWorld;import org.fjava.cxf.ws.StringFood;import org.fjava.cxf.ws.User;import org.fjava.cxf.ws.impl.HelloWorldWs;public class ClientMain {public static void main(String[] args) {//这是命令生成的类,该类的实例可当成工厂来使用HelloWorldWs factory = new HelloWorldWs();//无参的方法,返回的是远程Web Service服务端的代理,服务端不能关闭。HelloWorld helloWorld = factory.getHelloWorldWsPort();Client client = ClientProxy.getClient(helloWorld);client.getInInterceptors().add(new LoggingInInterceptor());client.getOutInterceptors().add(new LoggingOutInterceptor());StringFood allFoods = helloWorld.getAllFoods();List<Entry> entries = allFoods.getEntries();for (Entry entry : entries) {System.out.println(entry.getKey() + " " + entry.getValue().getDescribe());}}}返回结果:
十月 23, 2016 7:24:09 下午 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL信息: Creating Service {http://impl.ws.cxf.fjava.org/}HelloWorldWs from WSDL: http://192.168.0.159:6786/sayHello?wsdl十月 23, 2016 7:24:10 下午 org.apache.cxf.interceptor.AbstractLoggingInterceptor log信息: Outbound Message---------------------------ID: 1Address: http://192.168.0.159:6786/sayHelloEncoding: UTF-8Content-Type: text/xmlHeaders: {Accept=[*/*], SOAPAction=[""]}Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:getAllFoods xmlns:ns2="http://ws.cxf.fjava.org/"/></soap:Body></soap:Envelope>--------------------------------------十月 23, 2016 7:24:10 下午 org.apache.cxf.interceptor.AbstractLoggingInterceptor log信息: Inbound Message----------------------------ID: 1Response-Code: 200Encoding: UTF-8Content-Type: text/xml;charset=UTF-8Headers: {Content-Length=[885], content-type=[text/xml;charset=UTF-8], Server=[Jetty(7.4.2.v20110526)]}Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:getAllFoodsResponse xmlns:ns2="http://ws.cxf.fjava.org/"><return><entries><key>蟹王汉堡</key><value><describe>橙色,亮金色,我的宝贝,我的爱!</describe><id>3</id><name>蟹王汉堡</name></value></entries><entries><key>海绵金币</key><value><describe>吃着金币样的甜甜饼,想着海绵宝宝赚的钱被扣了,哈哈哈,爽气!</describe><id>4</id><name>海绵金币</name></value></entries><entries><key>一个汉堡</key><value><describe>是三层的,有夹层哦!</describe><id>1</id><name>一个汉堡</name></value></entries><entries><key>火腿肠</key><value><describe>这是章鱼哥从岸上偷运来的,据说很美味!</describe><id>2</id><name>火腿肠</name></value></entries></return></ns2:getAllFoodsResponse></soap:Body></soap:Envelope>--------------------------------------蟹王汉堡 橙色,亮金色,我的宝贝,我的爱!海绵金币 吃着金币样的甜甜饼,想着海绵宝宝赚的钱被扣了,哈哈哈,爽气!一个汉堡 是三层的,有夹层哦!火腿肠 这是章鱼哥从岸上偷运来的,据说很美味!
希望对你有帮助,祝你有一个好心情,加油!
若有错误、不全、可优化的点,欢迎纠正与补充;转载请注明出处!
1 0
- CXF-06:Web Service暴露后如何进行权限控制,CXF拦截器的理论以及如何为CXF的客户端和服务器端添加拦截器
- web service 权限控制以及cxf拦截器
- 【WebService】7.为CXF的客户端和服务器端添加拦截器
- CXF为服务器端和客户端添加自定义拦截器进行权限检查验证并且控制台打印日志(4)
- CXF:为服务器端和客户端添加自定义拦截器进行权限检查验证并且控制台打印日志
- 用CXF编写基于spring的web service 并添加cxf日志拦截器和自定义拦截器
- CXF学习05---Web Service的本质与服务器端添加拦截器
- CXF-08:自定义CXF拦截器来进行权限控制
- 7.Web Service CXF添加拦截器
- CXF添加拦截器
- CXF添加拦截器
- CXF添加拦截器
- CXF添加拦截器
- 关于web service与cxf的拦截器
- 使用CXF为Web Service添加拦截器,自定义拦截器
- Webservice:CXF添加拦截器实现权限控制
- CXF自定义拦截器实现权限控制
- 8.Web Service CXF添加自定义拦截器
- python项目打包发布总结
- 易容术有多神
- Service简单总结(android四大主键之一)
- SVG-Android开源库——项目简单接入与使用
- Java开发环境搭建
- CXF-06:Web Service暴露后如何进行权限控制,CXF拦截器的理论以及如何为CXF的客户端和服务器端添加拦截器
- 08:变量的作用域、初识指针
- android:通知
- Mark-Down-语法
- 技术盲区
- JFinal 安装之初体验
- ListView控件中插入一组图片
- Codeforces 727D-T-shirts Distribution
- linux网络编程之socket(五):tcp流协议产生的粘包问题和解决方案