web service权限控制
- 正常的思路是,让服务器端规定,input消息(客户端发来的消息)一定要携带某种特殊的数据,例如,用户名,密码。服务端根据对这些数据的判断来进行权限控制。做法是,控制用户发来的xml文档片段里的信息来判断。
- 现在用到了cxf框架,这个方法被阻断了,因为,cxf自己生成相应的xml文档片段,没有让我们手动生成。但是它提供了一个叫拦截器的东西
添加拦截器
1.首先获取endpoint.publish返回值,EndpointImpl,org.apache.cxf.jaxws.EndpointImpl,右边需要强转一下。
2.调用该对象的,getInterceptor和getOuterceptor 方法。获得服务端的in,out拦截器所属列表。接着自定义拦截器并添加进去。
3.定义拦截器,实现Interceptor接口。通常继承AbstractPhaseInterceptor这个抽象类。或者使用系统实现好的拦截器LoggingInInterceptor 和LoggingOutInterceptor,构造函数的参数代表log输出的位置。还会有其他拦截器,这里暂时不举例。
因为添加拦截器并没有更改web service,就是接口和实现类,以及发布地址。所以不必重新加载客户端。
从logging拦截器打印出来的信息我们可以看出,xml片段的一些信息。
envelope
–header:不是强制出现的,是由程序员控制添加的,主要用于携带一些额外的信息,比如用户名,密码等信息。
–body:下面有两个内容,如果调用正确,里面的内容应该是遵守wsdl的;如果调用失败,是fault子元素。