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

时间: 2024-10-12 21:09:55

Webservice:CXF添加拦截器实现权限控制的相关文章

自定义注解+拦截器实现权限控制

根据5.2中的讲解,当监控high priority queue的PDSP channel设定好后,那么与之对应的event就知道了(PDSP channel与event一一对应)(注意5.x讲的是中断的配置,并不是exception的配置,4.x讲的是exception) 中断event与ISR配置代码如下,目的是使event与ISR建立联系: /*Configure event*/ EventCombinerEventConfig( systemEvent,  (TEventCombiner

struts自定义拦截器--登录权限控制

说明:该自定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.总体的步骤: (1).定义拦截器类.LoginInterceptor(完成登录拦截) 方式1:实现com.opensymphony.xwork2.interceptor.Interceptor接口并覆写方法. 方式2:继承com.opensymphony.xwork2.interceptor.AbstractIntercep

WebService学习笔记-CXF添加拦截器

Webservice拦截器:在webservice请求过程中,动态操作请求和响应的数据 分类 按照所处的位置分:服务器端拦截器  客户端拦截器 按照消息的方向分:入拦截器  出拦截器 按照定义者分:系统拦截器 自定义拦截器 在服务器端添加拦截器 package com.demo; //注意引入的类一定要正确 import javax.xml.ws.Endpoint; import org.apache.cxf.interceptor.LoggingInInterceptor; import or

cxf添加拦截器应用

项目中有时候也会做一些类似于权限验证的东西,拦截器也是一种实现方式.拦截器主要作用是做一些权限过滤,编码处理等. webService接口也可以上拦截器,我们也可以给webservice请求加权限判断功能: webservice分服务端和客户端,服务端和客户端都是可以加拦截器的,无论是服务端还是客户端,都分进,出(In,Out)拦截器: 可以使用cxf内置拦截器,也可以自定义拦截器,无论是自定义的拦截器,还是CXF自带的拦截器,都必须实现Interceptor接口. 下面分别从这两个方面来讲解:

6、Struts2拦截器实现权限控制

1.创建如下项目结果 2.在com.entity包下创建 1 package com.entity; 2 3 public class User { 4 private String name; 5 private String pwd; 6 7 public User() { 8 } 9 10 public User(String name, String pwd) { 11 this.name = name; 12 this.pwd = pwd; 13 } 14 15 public Stri

构建基于CXF的WebService服务(3)-- 利用拦截器实现权限验证

CXF中的拦截器分为in拦截器和out拦截器,又有客户端拦截器和服务端拦截器. 拦截器使用流程:客户端(out)-> 服务端(in)->处理业务->服务端(out)->客户端(in),并不是每一步都需要拦截器.在这里我们用到的是客户端Out拦截器和服务端in拦截器.服务端in拦截器检查用户级权限,客户端out浏览器发送用户信息给服务端. 1.创建服务端验证 JaxWsServerFactoryBean或Endpoint都可以通过getInInterceptors方法,向WebSer

使用CXF为webservice添加拦截器

拦截器分为Service端和Client端 拦截器是在发送soap消息包的某一个时机拦截soap消息包,对soap消息包的数据进行分析或处理.分为CXF自带的拦截器和自定义的拦截器 1.Service端: 通过将org.apache.cxf.jaxws.EndpointImpl类的方法即可实现   发布Web Service 方法可以通过Endpoint.publish()方法,此方法返为EndpointImpl,所以为Service端添加拦截器很简单. 部分代码: UserService us

WebService学习笔记-CXF添加自定义拦截器

使用自定义拦截器实现用户名和密码的校验 客户端:出拦截器 服务器:入拦截器 客户端 AddUserInterceptor.java package com.demo.interceptors; import java.util.List; import javax.xml.namespace.QName; import org.apache.cxf.binding.soap.SoapMessage; import org.apache.cxf.headers.Header; import org

Web Service学习-CXF开发Web Service的权限控制(二)

Web Service如何进行权限控制? 解决思路:服务器端要求input消息总是携带有用户名,密码信息,如果没有用户名和密码信息,直接拒绝调用 解决方案:拦截器 为了让程序员能访问,并修改CXF框架所生成的SOAP消息,CXF提供了拦截器 CXF(Celtix +XFire)说明: 如果不用CXF等框架,SOAP消息的生成,解析都是由程序员负责.无论是添加用户名,密码信息还是提取用户名,密码信息,都可由程序员代码完成. 如果使用CXF等框架,SOAP消息的生成,解析都是由CXF等框架来完成.