openfire 메시지 차단기
5084 단어 openfire
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);
}
}
}
비고: 차단기 자 체 는 보 내 온 메 시 지 를 차단 할 뿐 메시지 내용 을 수정 하지 않 았 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
OPENFIRE 지원 EMOJI(OPENFIRE 3.8.1 버전)오픈파이어로 XMPP 서버를 구축할 때 클라이언트가 이모티콘 문자를 보내면 연결이 끊깁니다. 오류 로그 부분은 다음과 같습니다. 2013.05.21 12:57:44 org.jivesoftware.openfire.ni...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.