From 3e6ce2c0cd31117196a5fbe7e542d62eba977525 Mon Sep 17 00:00:00 2001 From: "xiajun@doweidu.com" Date: Mon, 15 Sep 2014 18:24:31 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E5=AF=B9=20web=20=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=E7=9A=84=E5=AE=9E=E7=8E=B0=E3=80=90=E9=87=8D?= =?UTF-8?q?=E5=A4=A7=E6=9B=B4=E6=96=B0=E3=80=91=202.=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cim/nio/constant/CIMConstant.java | 11 ++ .../cim/nio/filter/ServerMessageDecoder.java | 57 ++++-- .../CIMRequestHandler.java | 2 +- .../cim/nio/handler}/HeartbeatHandler.java | 2 +- .../{handle => handler}/MainIOHandler.java | 11 +- cim_for_mina/ichat-server/.classpath | 2 +- .../org.eclipse.core.resources.prefs | 3 +- .../WebRoot/WEB-INF/classes/spring-cim.xml | 4 +- .../WebRoot/WEB-INF/lib/cim-core.1.5.jar | Bin 44567 -> 0 bytes .../ichat-server/WebRoot/console/header.jsp | 132 +++++++++---- .../ichat-server/WebRoot/console/index.jsp | 38 +--- .../ichat-server/WebRoot/console/nav.jsp | 31 +-- .../WebRoot/console/session/manage.jsp | 119 ++++++------ .../WebRoot/console/webclient/CIMBridge.mxml | 177 ++++++++++++++++++ .../WebRoot/console/webclient/CIMBridge.swf | Bin 0 -> 48379 bytes .../WebRoot/console/webclient/LoginDialog.jsp | 39 ++++ .../WebRoot/console/webclient/Message.as | 77 ++++++++ .../console/webclient/MessageDialog.jsp | 18 ++ .../WebRoot/console/webclient/ReplyBody.as | 28 +++ .../WebRoot/console/webclient/cim.js | 3 + .../WebRoot/console/webclient/dingdong.mp3 | Bin 0 -> 9161 bytes .../WebRoot/console/webclient/main.jsp | 138 ++++++++++++++ .../resource/bootstrap/css/bootstrap.min.css | 2 +- .../WebRoot/resource/css/base-ui.css | 34 +++- .../WebRoot/resource/css/dialog.css | 45 ++++- .../WebRoot/resource/css/main-layout.css | 37 ++-- .../WebRoot/resource/css/table.css | 11 +- .../WebRoot/resource/css/webbase.css | 47 ++--- .../WebRoot/resource/img/avatar-hover-bg.png | Bin 1999 -> 0 bytes .../WebRoot/resource/img/circle_banner.jpg | Bin 0 -> 321483 bytes .../WebRoot/resource/img/icon.png | Bin 3958 -> 5230 bytes .../WebRoot/resource/img/icon_admin.png | Bin 5964 -> 0 bytes .../WebRoot/resource/img/icon_group_admin.png | Bin 6145 -> 0 bytes .../WebRoot/resource/img/icon_success.png | Bin 1766 -> 2565 bytes .../WebRoot/resource/img/icon_super_admin.png | Bin 6449 -> 0 bytes .../WebRoot/resource/img/login-box.png | Bin 2579 -> 0 bytes .../WebRoot/resource/img/login_bg.png | Bin 19882 -> 0 bytes .../WebRoot/resource/img/nav_selected_bg.png | Bin 506 -> 0 bytes .../WebRoot/resource/img/scan_download.png | Bin 0 -> 60891 bytes .../WebRoot/resource/img/sprite_dialog.gif | Bin 3351 -> 0 bytes .../WebRoot/resource/img/step-spr.png | Bin 3384 -> 0 bytes .../WebRoot/resource/img/toolbar.png | Bin 8484 -> 0 bytes .../WebRoot/resource/img/usericon_bg.png | Bin 0 -> 562 bytes .../WebRoot/resource/img/wallpaper_a.jpg | Bin 81611 -> 0 bytes .../WebRoot/resource/js/framework.js | 47 ++++- .../ichat/cim/handler/BindHandler.java | 2 +- .../ichat/cim/handler/LogoutHandler.java | 2 +- .../cim/handler/SessionClosedHandler.java | 2 +- .../src/main/resource/spring-cim.xml | 4 +- .../cim/nio/constant/CIMConstant.java | 12 ++ .../cim/nio/filter/ServerMessageDecoder.java | 27 ++- .../cim/nio/filter/ServerMessageEncoder.java | 1 + .../CIMRequestHandler.java | 2 +- .../cim/nio/handler}/HeartbeatHandler.java | 2 +- .../{handle => handler}/MainIOHandler.java | 12 +- .../org.eclipse.core.resources.prefs | 3 +- .../WebRoot/WEB-INF/classes/spring-cim.xml | 4 +- .../ichat-server/WebRoot/console/header.jsp | 132 +++++++++---- .../ichat-server/WebRoot/console/index.jsp | 38 +--- .../ichat-server/WebRoot/console/nav.jsp | 31 +-- .../WebRoot/console/session/manage.jsp | 119 ++++++------ .../WebRoot/console/webclient/CIMBridge.mxml | 177 ++++++++++++++++++ .../WebRoot/console/webclient/CIMBridge.swf | Bin 0 -> 48379 bytes .../WebRoot/console/webclient/LoginDialog.jsp | 39 ++++ .../WebRoot/console/webclient/Message.as | 77 ++++++++ .../console/webclient/MessageDialog.jsp | 18 ++ .../WebRoot/console/webclient/ReplyBody.as | 28 +++ .../WebRoot/console/webclient/cim.js | 3 + .../WebRoot/console/webclient/dingdong.mp3 | Bin 0 -> 9161 bytes .../WebRoot/console/webclient/main.jsp | 138 ++++++++++++++ .../resource/bootstrap/css/bootstrap.min.css | 2 +- .../WebRoot/resource/css/base-ui.css | 34 +++- .../WebRoot/resource/css/dialog.css | 45 ++++- .../WebRoot/resource/css/main-layout.css | 37 ++-- .../WebRoot/resource/css/table.css | 11 +- .../WebRoot/resource/css/webbase.css | 47 ++--- .../WebRoot/resource/img/avatar-hover-bg.png | Bin 1999 -> 0 bytes .../WebRoot/resource/img/circle_banner.jpg | Bin 0 -> 321483 bytes .../WebRoot/resource/img/icon.png | Bin 3958 -> 5230 bytes .../WebRoot/resource/img/icon_admin.png | Bin 5964 -> 0 bytes .../WebRoot/resource/img/icon_group_admin.png | Bin 6145 -> 0 bytes .../WebRoot/resource/img/icon_success.png | Bin 1766 -> 2565 bytes .../WebRoot/resource/img/icon_super_admin.png | Bin 6449 -> 0 bytes .../WebRoot/resource/img/login-box.png | Bin 2579 -> 0 bytes .../WebRoot/resource/img/login_bg.png | Bin 19882 -> 0 bytes .../WebRoot/resource/img/nav_selected_bg.png | Bin 506 -> 0 bytes .../WebRoot/resource/img/scan_download.png | Bin 0 -> 60891 bytes .../WebRoot/resource/img/sprite_dialog.gif | Bin 3351 -> 0 bytes .../WebRoot/resource/img/step-spr.png | Bin 3384 -> 0 bytes .../WebRoot/resource/img/toolbar.png | Bin 8484 -> 0 bytes .../WebRoot/resource/img/usericon_bg.png | Bin 0 -> 562 bytes .../WebRoot/resource/img/wallpaper_a.jpg | Bin 81611 -> 0 bytes .../WebRoot/resource/js/framework.js | 47 ++++- .../ichat/cim/handler/BindHandler.java | 2 +- .../ichat/cim/handler/LogoutHandler.java | 2 +- .../cim/handler/SessionClosedHandler.java | 2 +- .../src/main/resource/spring-cim.xml | 4 +- 97 files changed, 1774 insertions(+), 447 deletions(-) rename cim_for_mina/cim-core/src/com/farsunset/cim/nio/{handle => handler}/CIMRequestHandler.java (90%) rename {cim_for_netty/cim-core/src/com/farsunset/cim/nio/handle => cim_for_mina/cim-core/src/com/farsunset/cim/nio/handler}/HeartbeatHandler.java (95%) rename cim_for_mina/cim-core/src/com/farsunset/cim/nio/{handle => handler}/MainIOHandler.java (93%) delete mode 100644 cim_for_mina/ichat-server/WebRoot/WEB-INF/lib/cim-core.1.5.jar create mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/CIMBridge.mxml create mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/CIMBridge.swf create mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/LoginDialog.jsp create mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/Message.as create mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/MessageDialog.jsp create mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/ReplyBody.as create mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/cim.js create mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/dingdong.mp3 create mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/main.jsp delete mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/avatar-hover-bg.png create mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/circle_banner.jpg delete mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/icon_admin.png delete mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/icon_group_admin.png delete mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/icon_super_admin.png delete mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/login-box.png delete mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/login_bg.png delete mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/nav_selected_bg.png create mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/scan_download.png delete mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/sprite_dialog.gif delete mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/step-spr.png delete mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/toolbar.png create mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/usericon_bg.png delete mode 100644 cim_for_mina/ichat-server/WebRoot/resource/img/wallpaper_a.jpg rename cim_for_netty/cim-core/src/com/farsunset/cim/nio/{handle => handler}/CIMRequestHandler.java (90%) rename {cim_for_mina/cim-core/src/com/farsunset/cim/nio/handle => cim_for_netty/cim-core/src/com/farsunset/cim/nio/handler}/HeartbeatHandler.java (95%) rename cim_for_netty/cim-core/src/com/farsunset/cim/nio/{handle => handler}/MainIOHandler.java (94%) create mode 100644 cim_for_netty/ichat-server/WebRoot/console/webclient/CIMBridge.mxml create mode 100644 cim_for_netty/ichat-server/WebRoot/console/webclient/CIMBridge.swf create mode 100644 cim_for_netty/ichat-server/WebRoot/console/webclient/LoginDialog.jsp create mode 100644 cim_for_netty/ichat-server/WebRoot/console/webclient/Message.as create mode 100644 cim_for_netty/ichat-server/WebRoot/console/webclient/MessageDialog.jsp create mode 100644 cim_for_netty/ichat-server/WebRoot/console/webclient/ReplyBody.as create mode 100644 cim_for_netty/ichat-server/WebRoot/console/webclient/cim.js create mode 100644 cim_for_netty/ichat-server/WebRoot/console/webclient/dingdong.mp3 create mode 100644 cim_for_netty/ichat-server/WebRoot/console/webclient/main.jsp delete mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/avatar-hover-bg.png create mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/circle_banner.jpg delete mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/icon_admin.png delete mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/icon_group_admin.png delete mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/icon_super_admin.png delete mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/login-box.png delete mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/login_bg.png delete mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/nav_selected_bg.png create mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/scan_download.png delete mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/sprite_dialog.gif delete mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/step-spr.png delete mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/toolbar.png create mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/usericon_bg.png delete mode 100644 cim_for_netty/ichat-server/WebRoot/resource/img/wallpaper_a.jpg 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 690a9bd3303a4ced83af3cf683ec7f2a6b7693d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44567 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 - + <% - 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 @@
- - -
- + - - +
- -