项目采用 web + openfire 方式
所有业务处理都有web项目实现
所有与聊天有关功能由openfire实现
openfire优化两点
1. 登录验证信息从redis中获取
修改SASLAuthentication.handle()
token = StringUtils.decodeBase64(doc.getText().trim());
if (token == null) {
token = new byte[0];
} else {
//写redis验证相关代码 客户端传过来的密码是 "用户名~密码" 组合 ,
//查找ASCII 码可知 ~ 就是 7e
String uid = null;
try {
String hexToken = EncodeUtil.bytes2hexstring(token);
hexToken = hexToken.toLowerCase();
int pos7E = hexToken.indexOf("7e");
uid = hexToken.substring(2, pos7E - 2);
String ticket = hexToken.substring(pos7E + 2, hexToken.length());
handleTicket(session, uid, ticket);
} catch (Exception ex) {
ex.printStackTrace();
try {
authenticationFailed(session, Failure.NOT_AUTHORIZED);
status = Status.failed;
break;
}
}
2. 离线消息以及消息记录保存到mongodb中
修改离线消息存储类OfflineMessageStore.addMessage()
protected void addMessage(final Message message) {
if (message == null) {
return;
}
if(!shouldStoreMessage(message)) {
return;
}
JID recipient = message.getTo();
String username = recipient.getNode();
// If the username is null (such as when an anonymous user), don't store.
if (username == null) {
return;
}
//mongodb存储信息
MongoStoreManager.getInstance().addObject(new OfflineMessageDoc(message));
}