openfire聊天历史记录插件的制作

来源:互联网 发布:跳跃网络竞猜 编辑:程序博客网 时间:2024/05/22 05:45

该聊天记录的插件,可以客户端调用,通过访问URL,其实是一个servlet地址,也可以通过页面来查看聊天的历史记录。

首先是插件类

package org.jivesoftware.openfire.plugin;

import java.io.File;

import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.interceptor.InterceptorManager;

public class ChatPlugin implements Plugin {
 private chatInterceptor chatInter = null;

 @Override
 public void destroyPlugin() {
       // TODO Auto-generated method stub
     if(chatInter != null)
     {
            InterceptorManager.getInstance().removeInterceptor(chatInter);
     }
 }

 @Override
 public void initializePlugin(PluginManager manager, File pluginDirectory) {
  chatInter = new chatInterceptor();
  InterceptorManager.getInstance().addInterceptor(chatInter);
 }
}

 

package org.jivesoftware.openfire.plugin;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.text.SimpleDateFormat;

import org.jivesoftware.database.DbConnectionManager;
import org.jivesoftware.openfire.interceptor.PacketInterceptor;
import org.jivesoftware.openfire.interceptor.PacketRejectedException;
import org.jivesoftware.openfire.session.Session;
import org.xmpp.packet.Message;
import org.xmpp.packet.Packet;
import org.xmpp.packet.Message.Type;

public class chatInterceptor implements PacketInterceptor{

 private static final String CREATE_CHATMESSAGE_ITEM =
        "INSERT INTO ofChatHistory (fromJID, toJID, message, messagetime) " +
        "VALUES (?, ?, ?, ?)";

 private static Connection con = null;
 @Override
 public void interceptPacket(Packet packet, Session session,
   boolean incoming, boolean processed) throws PacketRejectedException {
  // TODO Auto-generated method stub
  if(!processed && packet instanceof Message)
  {
   if(incoming && Type.chat == ((Message)packet).getType())
   {
    PreparedStatement pstmt = null;
    try {
     if(con == null || con.isClosed())
      con = (Connection) DbConnectionManager.getConnection();
     pstmt = (PreparedStatement) con.prepareStatement(CREATE_CHATMESSAGE_ITEM);
     pstmt.setString(1, ((Message)packet).getFrom().toBareJID());
     pstmt.setString(2, ((Message)packet).getTo().toBareJID());
     pstmt.setString(3, ((Message)packet).getBody());
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     String ly_time = sdf.format(new java.util.Date());

     pstmt.setString(4, ly_time);
     pstmt.executeUpdate();
    }
    catch (Exception ex) {
     System.out.println(ex.getMessage());
     DbConnectionManager.closeConnection(pstmt, con);
     con = null;
    }
    finally {
    }
   }
  }
 }

}

 

package org.jivesoftware.openfire.plugin.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jivesoftware.admin.AuthCheckFilter;
import org.jivesoftware.database.DbConnectionManager;
public class chatRecordServlet extends HttpServlet {
 /**
  * 
  */
 private static final long serialVersionUID = 1L;

 public chatRecordServlet() {
  // TODO Auto-generated constructor stub
 }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        super.init(servletConfig); 

        AuthCheckFilter.addExclude("chatRecord/history");
    }


    @Override
    public void destroy() {
        super.destroy();
        AuthCheckFilter.removeExclude("chatRecord/history");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
     String fromJid = request.getParameter("fromjid");
     String toJid = request.getParameter("tojid");
     response.setContentType("text/xml");  
  response.setCharacterEncoding("UTF-8");    
  PrintWriter out = response.getWriter();  
        out.println("<result>");
     Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            con = (Connection) DbConnectionManager.getConnection();
            pstmt = (PreparedStatement) con.prepareStatement("select * from ofchathistory " 
              + "where (fromJID = ? and toJID = ?) OR (fromJID = ? and toJID = ?) ORDER BY id");
            pstmt.setString(1, fromJid);
            pstmt.setString(2, toJid);
            pstmt.setString(3, toJid);
            pstmt.setString(4, fromJid);
            rs = (ResultSet) pstmt.executeQuery();
            
            out.print("<messagehistory>");
            while (rs.next()) {
             String fromJID = rs.getString("fromJID");
             String toJID = rs.getString("toJID");
             String message = rs.getString("message");
             String messagetime = rs.getString("messagetime");
             
             out.print("<message>");
             out.print("<fromjid>" + fromJID + "</fromjid>");
             out.print("<tojid>" + toJID + "</tojid>");
             out.print("<body>" + message + "</body>");
             out.print("<time>" + messagetime + "</time>");
             out.print("</message>");
            }
            out.print("</messagehistory></result>");
        }
        catch (Exception ex) {
           System.out.println(ex.getMessage());
        }
        finally {
            DbConnectionManager.closeConnection(rs, pstmt, con);
        }

  out.flush();
  //out.close();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }
}

 

 

 

package org.jivesoftware.openfire.plugin.servlet;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;

import org.jivesoftware.database.DbConnectionManager;
import org.jivesoftware.util.JiveGlobals;

public class chatUtils {

 public static String fJid = "";
 public static String tJid = "";
 public static Vector<Map<String, String>> getHistory(String fromJid, String toJid)
 {
  if(fromJid != null)
   fJid = fromJid;
  if(toJid != null)
   tJid = toJid;
  Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
    String xmppdomain = "@" + JiveGlobals.getProperty("xmpp.domain");
        Vector<Map<String, String>> vec = new Vector<Map<String, String>>();
        try {
            con = (Connection) DbConnectionManager.getConnection();
            pstmt = (PreparedStatement) con.prepareStatement("select * from ofchathistory " 
              + "where (fromJID = ? and toJID = ?) OR (fromJID = ? and toJID = ?) ORDER BY id");
            pstmt.setString(1, fJid+xmppdomain);
            pstmt.setString(2, tJid+xmppdomain);
            pstmt.setString(3, tJid+xmppdomain);
            pstmt.setString(4, fJid+xmppdomain);
            rs = (ResultSet) pstmt.executeQuery();
            
            while (rs.next()) {             
             String fromJID = rs.getString("fromJID");
             String toJID = rs.getString("toJID");
             String message = rs.getString("message");
             String messagetime = rs.getString("messagetime");
             
             Map<String, String> map = new HashMap<String, String>();
             map.put("fromjid", fromJID);
             map.put("tojid", toJID);
             map.put("body", message);
             map.put("time", messagetime);
             vec.add(map);
            }
        }
        catch (Exception ex) {
           System.out.println(ex.getMessage());
        }
        finally {
            DbConnectionManager.closeConnection(rs, pstmt, con);
        }
        return vec;
 }
 
 public static Vector<String> getUserJid()
 {
  Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Vector<String> vec = new Vector<String>();
        try {
            con = (Connection) DbConnectionManager.getConnection();
            pstmt = (PreparedStatement) con.prepareStatement("select * from ofuser");
            rs = (ResultSet) pstmt.executeQuery();
            
            while (rs.next()) {
             vec.add(rs.getString("username"));
            }
        }
        catch (Exception ex) {
           System.out.println(ex.getMessage());
        }
        finally {
            DbConnectionManager.closeConnection(rs, pstmt, con);
        }
        return vec;
 }
}