Class InterceptorManager

java.lang.Object
org.jivesoftware.openfire.interceptor.InterceptorManager

public class InterceptorManager extends Object
An InterceptorManager manages the list of global interceptors and per-user interceptors that are invoked before and after packets are read and sent. If an interceptor is installed for a user then it will receive all packets sent or received for any connection of that user.

PacketInterceptors that are invoked before the packet is sent or processed (when read) may change the original packet or reject the packet by throwing a PacketRejectedException. If the interceptor rejects a received packet then the sender of the packet receive a not_allowed error.

Author:
Gaston Dombiak
See Also:
  • Constructor Details

    • InterceptorManager

      public InterceptorManager()
  • Method Details

    • getInstance

      public static InterceptorManager getInstance()
      Returns a singleton instance of InterceptorManager.
      Returns:
      an instance of InterceptorManager.
    • getInterceptors

      public List<PacketInterceptor> getInterceptors()
      Returns an unmodifiable list of global packet interceptors. Global interceptors are applied to all packets read and sent by the server.
      Returns:
      an unmodifiable list of the global packet interceptors.
    • addInterceptor

      public void addInterceptor(PacketInterceptor interceptor)
      Inserts a new interceptor at the end of the list of currently configured interceptors. This interceptor will be used for all the sent and received packets.
      Parameters:
      interceptor - the interceptor to add.
    • addInterceptor

      public void addInterceptor(int index, PacketInterceptor interceptor)
      Inserts a new interceptor at specified index in the list of currently configured interceptors. This interceptor will be used for all the sent and received packets.
      Parameters:
      index - the index in the list to insert the new interceptor at.
      interceptor - the interceptor to add.
    • removeInterceptor

      public boolean removeInterceptor(PacketInterceptor interceptor)
      Removes the global interceptor from the list.
      Parameters:
      interceptor - the interceptor to remove.
      Returns:
      true if the item was present in the list
    • getUserInterceptors

      public List<PacketInterceptor> getUserInterceptors(String username)
      Returns an unmodifable list of packet interceptors that are related to the specified username.
      Parameters:
      username - the name of the user.
      Returns:
      an unmodifiable list of packet interceptors that are related to the specified username.
    • addUserInterceptor

      public void addUserInterceptor(String username, int index, PacketInterceptor interceptor)
      Inserts a new interceptor at specified index in the list of currently configured interceptors for a specific username. This interceptor will be used only when a packet was sent or received by the specified username.
      Parameters:
      username - the name of the user.
      index - the index in the list to insert the new interceptor at.
      interceptor - the interceptor to add.
    • removeUserInterceptor

      public boolean removeUserInterceptor(String username, PacketInterceptor interceptor)
      Removes the interceptor from the list of interceptors that are related to a specific username.
      Parameters:
      username - the name of the user.
      interceptor - the interceptor to remove.
      Returns:
      true if the item was present in the list
    • invokeInterceptors

      public void invokeInterceptors(org.xmpp.packet.Packet packet, Session session, boolean read, boolean processed) throws PacketRejectedException
      Invokes all currently-installed interceptors on the specified packet. All global interceptors will be invoked as well as interceptors that are related to the address of the session that received or is sending the packet.

      Interceptors are executed before and after processing an incoming packet and sending a packet to a user. This means that interceptors are able to alter or reject packets before they are processed further. If possible, interceptors should perform their work in a short time so that overall performance is not compromised.

      Parameters:
      packet - the packet that has been read or is about to be sent.
      session - the session that received the packet or that the packet will be sent to.
      read - true indicates that the packet was read. When false, the packet is being sent to a user.
      processed - true if the packet has already processed (incoming or outgoing). If the packet hasn't already been processed, this flag will be false.
      Throws:
      PacketRejectedException - if the packet should be prevented from being processed.
    • invokeInterceptors

      protected static void invokeInterceptors(Collection<PacketInterceptor> interceptors, org.xmpp.packet.Packet packet, Session session, boolean read, boolean processed) throws PacketRejectedException
      Invokes a collection of interceptors for the provided packet.
      Parameters:
      interceptors - The interceptors to be triggered (can be null, can be empty).
      packet - the packet that has been read or is about to be sent.
      session - the session that received the packet or that the packet will be sent to.
      read - true indicates that the packet was read. When false, the packet is being sent to a user.
      processed - true if the packet has already processed (incoming or outgoing). If the packet hasn't already been processed, this flag will be false.
      Throws:
      PacketRejectedException - if the packet should be prevented from being processed.