openfire 메시지 차단기

5084 단어 openfire
문서 참조:http://blog.csdn.net/majian_1987/article/details/9814185
 
package com.bis.plugin.messageplugin;

import java.io.File;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.interceptor.InterceptorManager;
import org.jivesoftware.openfire.interceptor.PacketInterceptor;
import org.jivesoftware.openfire.interceptor.PacketRejectedException;
import org.jivesoftware.openfire.session.Session;
import org.xmpp.packet.Packet;

public class MessagePlugIn implements Plugin,PacketInterceptor {
	private static PluginManager pluginManager;
	private InterceptorManager interceptoerManager;
	
	
	
	public MessagePlugIn() {
		interceptoerManager = InterceptorManager.getInstance();
	}

	@Override
	public void initializePlugin(PluginManager manager, File pluginDirectory) {
		pluginManager = manager;
		//            
		//InterceptorManager.getInstance().addInterceptor(this);
		interceptoerManager.addInterceptor(this);
		System.out.println("      !");
	}

	@Override
	public void destroyPlugin() {
		interceptoerManager.removeInterceptor(this);
		System.out.println("      !");
	}

	@Override
	public void interceptPacket(Packet packet, Session session,
			boolean incoming, boolean processed) throws PacketRejectedException {
		System.out.println("        :"+packet.toXML());
	}

}

 
1. Plugin 인 터 페 이 스 를 계승 하 는 것 은 시스템 이 시 작 될 때 initializePlugin () 방법 을 실행 하 는 것 으로 플러그 인 류 임 을 나타 낸다.
2. Packet Interceptor 인 터 페 이 스 를 계승 하여 이 종 류 는 Message 를 차단 하 는 메시지 류 임 을 나타 내 며 차단 할 때 interceptPacket 방법 을 실행 합 니 다.
 
openfire 는 어떻게 메시지 차단 기 를 관리 합 니까?
Message Router 류 의 route (Message packet) 방법 을 볼 수 있 습 니 다.
 
public void route(Message packet) {
	if (packet == null) {
		throw new NullPointerException();
	}
	ClientSession session = sessionManager.getSession(packet.getFrom());
	try {
		// Invoke the interceptors before we process the read packet
		//              ,            
		InterceptorManager.getInstance().invokeInterceptors(packet, session, true, false);
		if (session == null || session.getStatus() == Session.STATUS_AUTHENTICATED) {
			JID recipientJID = packet.getTo();

			// Check if the message was sent to the server hostname
			if (recipientJID != null && recipientJID.getNode() == null && recipientJID.getResource() == null &&
					serverName.equals(recipientJID.getDomain())) {
				if (packet.getElement().element("addresses") != null) {
					// Message includes multicast processing instructions. Ask the multicastRouter
					// to route this packet
					multicastRouter.route(packet);
				}
				else {
					// Message was sent to the server hostname so forward it to a configurable
					// set of JID's (probably admin users)
					sendMessageToAdmins(packet);
				}
				return;
			}

			try {
				// Deliver stanza to requested route
				routingTable.routePacket(recipientJID, packet, false);
			}
			catch (Exception e) {
				log.error("Failed to route packet: " + packet.toXML(), e);
				routingFailed(recipientJID, packet);
			}
		}
		else {
			packet.setTo(session.getAddress());
			packet.setFrom((JID)null);
			packet.setError(PacketError.Condition.not_authorized);
			session.process(packet);
		}
		// Invoke the interceptors after we have processed the read packet
		//              ,            
		InterceptorManager.getInstance().invokeInterceptors(packet, session, true, true);
	} catch (PacketRejectedException e) {
		// An interceptor rejected this packet
		if (session != null && e.getRejectionMessage() != null && e.getRejectionMessage().trim().length() > 0) {
			// A message for the rejection will be sent to the sender of the rejected packet
			Message reply = new Message();
			reply.setID(packet.getID());
			reply.setTo(session.getAddress());
			reply.setFrom(packet.getTo());
			reply.setType(packet.getType());
			reply.setThread(packet.getThread());
			reply.setBody(e.getRejectionMessage());
			session.process(reply);
		}
	}
}

 
비고: 차단기 자 체 는 보 내 온 메 시 지 를 차단 할 뿐 메시지 내용 을 수정 하지 않 았 습 니 다.
openfire 消息拦截器_第1张图片
 

좋은 웹페이지 즐겨찾기