Chapter 44. 拦截操作

HornetQ支持拦截器。拦截器可以拦截进入服务器的数据包。每进入服务器 一个数据包,拦截器就被调用一次,允许一些特殊和处理,例如对包的审计、过滤等。拦截器可以对数据包 进行改动。

44.1. 实现拦截器

拦截器必须要实现Interceptor接口

package org.hornetq.api.core.interceptor;

public interface Interceptor
{   
   boolean intercept(Packet packet, RemotingConnection connection) 
                throws HornetQException;
}
         

它的方法的返回值是很重要的:

  • 如果返回true,处理正常进行下去。

  • 如果返回false,则处理被中断,其它的拦截器将不会被调用,数据包将不会 被服务器所处理。

44.2. 配置拦截器

拦截器的配置在hornetq-configuration.xml文件中:

<remoting-interceptors>
   <class-name>org.hornetq.jms.example.LoginInterceptor</class-name>
   <class-name>org.hornetq.jms.example.AdditionalPropertyInterceptor</class-name>
</remoting-interceptors>
         

拦截器的类(以及它们依赖的类)必须要在服务器的classpath中,否则不能被正常初始化及调用。

44.3. 客户端拦截器

在客户端也可以有拦截器来拦截来自服务器的数据包。ClientSessionFactoryaddInterceptor()方法可以用来添加拦截器。

同样拦截器的类(以及它们依赖的类)必须要在客户端的classpath中,否则它们不能被正常初始化及调用。

44.4. 例子

参见Section 11.1.18, “拦截器(Interceptor)”。这个例子中展示了如何使用拦截器向发往服务器的消息中 添加属性。