diff --git a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/constant/CIMConstant.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/constant/CIMConstant.java index aba6580..02418b1 100644 --- a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/constant/CIMConstant.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/constant/CIMConstant.java @@ -36,6 +36,17 @@ public interface CIMConstant { public static final String HEARTBEAT_KEY ="heartbeat"; + + /** + * FLEX 客户端socket请求发的安全策略请求,需要特殊处理,返回安全验证报文 + */ + public static final String FLEX_POLICY_REQUEST =""; + + public static final String FLEX_POLICY_RESPONSE ="\0"; + + + + /** * 对应ichat 中 spring-cim.xml > bean:mainIoHandler >handlers * 为 服务端处理对应的handlers,应该继承与com.farsunset.cim.nio.handle.AbstractHandler diff --git a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java index f863800..d8ae6e5 100644 --- a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java @@ -1,9 +1,12 @@ package com.farsunset.cim.nio.filter; import java.io.ByteArrayInputStream; +import java.nio.charset.Charset; + import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import org.apache.log4j.Logger; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.CumulativeProtocolDecoder; @@ -20,7 +23,9 @@ import com.farsunset.cim.nio.mutual.SentBody; * */ public class ServerMessageDecoder extends CumulativeProtocolDecoder { - + + protected final Logger logger = Logger.getLogger(ServerMessageDecoder.class); + private final Charset charset = Charset.forName("UTF-8"); private IoBuffer buff = IoBuffer.allocate(320).setAutoExpand(true); @Override public boolean doDecode(IoSession iosession, IoBuffer iobuffer, ProtocolDecoderOutput out) throws Exception { @@ -35,7 +40,12 @@ public class ServerMessageDecoder extends CumulativeProtocolDecoder { complete = true; break; - } else { + }else if(b == '\0')//flex客户端 安全策略验证时会收到\0的消息,忽略此消息内容 + { + complete = true; + break; + } + else { buff.put(b); } } @@ -43,22 +53,35 @@ public class ServerMessageDecoder extends CumulativeProtocolDecoder { buff.flip(); byte[] bytes = new byte[buff.limit()]; buff.get(bytes); - String message = new String(bytes, "UTF-8"); - buff.clear(); - - SentBody body = new SentBody(); - - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.parse(new ByteArrayInputStream(message.getBytes("UTF-8"))); - body.setKey(doc.getElementsByTagName("key").item(0).getTextContent()); - NodeList items = doc.getElementsByTagName("data").item(0).getChildNodes(); - for (int i = 0; i < items.getLength(); i++) { - Node node = items.item(i); - body.getData().put(node.getNodeName(), node.getTextContent()); - } - out.write(body); + String message = new String(bytes, "UTF-8"); + logger.warn("ServerMessageDecoder:" + message); + buff.clear(); + try{ + + SentBody body = new SentBody(); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document doc = builder.parse(new ByteArrayInputStream(bytes)); + body.setKey(doc.getElementsByTagName("key").item(0).getTextContent()); + + NodeList datas = doc.getElementsByTagName("data"); + if(datas!=null&&datas.getLength()>0) + { + NodeList items = datas.item(0).getChildNodes(); + for (int i = 0; i < items.getLength(); i++) { + Node node = items.item(i); + body.getData().put(node.getNodeName(), node.getTextContent()); + } + } + + out.write(body); + }catch(Exception e){ + //e.printStackTrace(); + logger.warn(e.getMessage()); + + out.write(message); + } } return complete; } diff --git a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/CIMRequestHandler.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handler/CIMRequestHandler.java similarity index 90% rename from cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/CIMRequestHandler.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/handler/CIMRequestHandler.java index b02accf..07b0de7 100644 --- a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/CIMRequestHandler.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handler/CIMRequestHandler.java @@ -1,5 +1,5 @@ -package com.farsunset.cim.nio.handle; +package com.farsunset.cim.nio.handler; /** * 请求处理接口,所有的请求实现必须实现此接口 diff --git a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/HeartbeatHandler.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handler/HeartbeatHandler.java similarity index 95% rename from cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/HeartbeatHandler.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/handler/HeartbeatHandler.java index 3bab701..5a6f47b 100644 --- a/cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle/HeartbeatHandler.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handler/HeartbeatHandler.java @@ -1,5 +1,5 @@ -package com.farsunset.cim.nio.handle; +package com.farsunset.cim.nio.handler; import org.apache.log4j.Logger; diff --git a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/MainIOHandler.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handler/MainIOHandler.java similarity index 93% rename from cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/MainIOHandler.java rename to cim_for_mina/cim-core/src/com/farsunset/cim/nio/handler/MainIOHandler.java index 9b3dccf..e91c1cc 100644 --- a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle/MainIOHandler.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/handler/MainIOHandler.java @@ -1,5 +1,5 @@ -package com.farsunset.cim.nio.handle; +package com.farsunset.cim.nio.handler; import java.util.HashMap; @@ -40,6 +40,15 @@ public class MainIOHandler extends IoHandlerAdapter { throws Exception { logger.debug("message: " + message.toString()); + /** + * flex 客户端安全策略请求,需要返回特定报文 + */ + if(CIMConstant.FLEX_POLICY_REQUEST.equals(message)) + { + ios.write(CIMConstant.FLEX_POLICY_RESPONSE); + return ; + } + CIMSession cimSession =new CIMSession(ios); ReplyBody reply = new ReplyBody(); SentBody body = (SentBody) message; diff --git a/cim_for_mina/ichat-server/.classpath b/cim_for_mina/ichat-server/.classpath index 6c62d67..e0cff4c 100644 --- a/cim_for_mina/ichat-server/.classpath +++ b/cim_for_mina/ichat-server/.classpath @@ -19,7 +19,6 @@ - @@ -39,5 +38,6 @@ + diff --git a/cim_for_mina/ichat-server/.settings/org.eclipse.core.resources.prefs b/cim_for_mina/ichat-server/.settings/org.eclipse.core.resources.prefs index 3d1cada..be1ca8f 100644 --- a/cim_for_mina/ichat-server/.settings/org.eclipse.core.resources.prefs +++ b/cim_for_mina/ichat-server/.settings/org.eclipse.core.resources.prefs @@ -1,4 +1,5 @@ -#Tue May 06 16:51:02 CST 2014 +#Mon Sep 15 17:02:27 CST 2014 eclipse.preferences.version=1 +encoding//WebRoot/console/webclient/cim.js=UTF-8 encoding//src/main/java/com/farsunset/ichat/api/action/MessageAction.java=gbk encoding/=UTF-8 diff --git a/cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/spring-cim.xml b/cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/spring-cim.xml index dbf65a0..2375cfb 100644 --- a/cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/spring-cim.xml +++ b/cim_for_mina/ichat-server/WebRoot/WEB-INF/classes/spring-cim.xml @@ -26,7 +26,7 @@ - + @@ -37,7 +37,7 @@ - + diff --git a/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/cim-core.1.5.jar b/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/cim-core.1.5.jar deleted file mode 100644 index 690a9bd..0000000 Binary files a/cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/cim-core.1.5.jar and /dev/null differ diff --git a/cim_for_mina/ichat-server/WebRoot/console/header.jsp b/cim_for_mina/ichat-server/WebRoot/console/header.jsp index 959c53f..55ebc38 100644 --- a/cim_for_mina/ichat-server/WebRoot/console/header.jsp +++ b/cim_for_mina/ichat-server/WebRoot/console/header.jsp @@ -1,8 +1,10 @@ <%@ page language="java" pageEncoding="UTF-8"%> - + <% - String headerBasePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ request.getContextPath(); - + String headerBasePath = request.getScheme() + "://" + + request.getServerName() + ":" + request.getServerPort() + + request.getContextPath(); + Object admin = session.getAttribute("admin"); %> @@ -41,53 +68,76 @@
- - -
- + - - +
- -