行云无鸣

2012-03-20

Jetty下的struts2报”There is no Action mapped ……”

Filed under: 乱语 — 标签:, , , — hellyguo @ 13:48

在tomcat下正常运行的程序,在jetty下运行异常,报无法找到Struts的ACTION:“There is no Action mapped for namespace / and action name ”。
通过打开struts的devMode,打开struts2的日志和xwork2的日志,终于定位问题:
在web.xml里面指定了struts配置文件struts.xml的路径,写的是“/conf/struts/struts.xml”。这样写,在tomcat下能正常运行,但在jetty下,无法加载,所有配置无法读取到。所以无法找到任何action。改为“conf/struts/struts.xml”就可以了。
总结:jetty的类加载器,比tomcat的加载器要严格。

2012-03-06

为Apache POI启用日志

Filed under: 乱语 — 标签:, , — hellyguo @ 13:10

POI通过JVM参数配置来设置日志类。如果不设置,默认是执行空方法,不输出任何日志。
如果需要POI日志,可设置JVM参数:
-Dorg.apache.poi.util.POILogger=org.apache.poi.util.CommonsLogger
可选的有:

  • CommonsLogger : 采用Apache Common Logging
  • DummyPOILogger : 日志简单放入ArrayList
  • NullLogger : 默认使用的空方法
  • SystemOutLogger : 采用SystemOut输出

选用CommonsLogger,可通过jcl-over-slf4j+slf4j+logback,通过配置logback.xml,灵活输出日志

2012-01-01

PATH路径输出变为”C:\Windows\system32\NV;.;”

Filed under: 乱语 — 标签:, , , , — hellyguo @ 21:32

我的计算机是Lenovo的T420,有两块显卡:Intel HD和NV 4200。刚装好系统时,由于我顺手禁用了NV的几个服务。所以,一直采用的显卡是Intel HD。
前几天,我打算玩游戏,打开了NV的服务后,噩梦开始了。CMD下的PATH输出正常,但在其他程序中,PATH输出就不正常,输出”PATH=C:\Windows\system32\NV;.;”。
让我们来看下这个文件夹下有什么:

2011.12.30 09:35 .
2011.12.30 09:35 ..
2011.04.01 22:00 15,039,080 ig4icd32.dll
2011.04.01 22:00 644,712 igd10umd32.dll
2011.04.01 22:00 644,712 igdumdx32.dll

ig4icd32.dll/igd10umd32.dll/igdumdx32.dll这几个文件,在Intel HD的驱动中也存在。猜想是,NV为实现双显卡切换,重写了与Intel HD驱动同名的DLL,来调用NV自身的DLL。
为此目的,NV必须将这些DLL库放在Intel HD的DLL库前优先加载。最简单的方法是将这些DLL放在PATH查询路径的最前面,即将”C:\Windows\system32\NV”放在PATH变量的最前面。
而实现此功能的程序,存在BUG,没有实现将”C:\Windows\system32\NV”放于PATH变量最前面,而是实现了将此路径叠加当前路径,覆盖PATH。也就是”PATH=C:\Windows\system32\NV;.;”。
于是,我再次禁用了NV的服务。重启后,PATH就正常了。

2011-12-30

高并发下,Double.toString(double)方法存在并发瓶颈

Filed under: 乱语 — 标签:, , , — hellyguo @ 19:51

某项目中使用了大量高精度计算,采用的BigDecimal对象是通过BigDecimal.valueOf(double)或new BigDecimal(Double.toString(double))来生成的。
在高并发下,Double.toString(double)存在互斥锁,将block其他线程。
而由于项目中每个线程几乎都是在计算,导致线程互斥几率大幅放大。

如图1,这是获得锁的线程,“Owns Monitor Lock on sun/misc/FloatingDecimal@0000000116824D10/0000000116824D28”
owns lock thread
如图2,这是等待锁的线程之一,“Waiting for Monitor Lock on sun/misc/FloatingDecimal@0000000116824D10/0000000116824D28”
blocked thread
锁等待的时间倒是都不会太长,在8ms左右。但在高并发情况下,CPU会急剧飙升,且处理时间也会因此而拉长。
blacked time

解决方法:
BigDecimal对象改用new BigDecimal(String)方法来生成,可回避此问题

2011-12-22

CSDN的用户密码居然用明文保存,600W客户邮箱密码被泄露

Filed under: 乱语 — 标签:, , , — hellyguo @ 09:16

偌大一个网站,密码居然用明文保存。实在是不得不吐血!

事情发生后,一没有立即给所有用户发邮件通知;二没有在首页及论坛显要位置发布提醒公告;三是在登录时要求修改密码时,点滴不提为啥,只说是你密码安全性低,回避密码被泄露的问题。

丫的,字母+数字+字符+8位以上,你不明文保存的话,这安全性低?你忽悠你的用户是IT盲?在你论坛上混的都是IT行当,谁不知道密码存储的起码规则?就你CSDN牛,为了和第三方的chat客户端联动,生生使用了明文密码。
我很好奇,你CSDN的chat客户端,有多少人在用?

说白了,CSDN明显在回避连带的责任,公告中完全没有写到连带的邮箱密码暴露所带来的其他问题,如私人信件的泄密可能/支付宝账户盗用可能/网银验证信息暴露/QQ、MSN、微博等社交系统的滥用。种种这些在其公告中完全没有提及!丫就是没有诚意!

2011-12-03

在Linux下安装CLI版本的Dropbox

Filed under: 乱语 — 标签:, , — hellyguo @ 14:07

1.下载并解压安装包

wget -O – http://www.dropbox.com/download?plat=lnx.x86 | tar xzf –

2.从解压出的~/.dropbox-dist文件夹执行守护进程

~/.dropbox-dist/dropboxd

3.如果是第一次执行,会提示要求拷贝出现的链接到浏览器去认证
示例如下

root@www:~# ~/.dropbox-dist/dropboxd
This client is not linked to any account…
Please visit https://www.dropbox.com/cli_link?host_id={hex id}&cl=en_US to link this machine.

通过浏览器访问此链接后,会要求你登录或再度输入密码,成功后终端即出现

root@www:~# ~/.dropbox-dist/dropboxd
This client is not linked to any account…
Please visit https://www.dropbox.com/cli_link?host_id={hex id}&cl=en_US to link this machine.
Client successfully linked, Welcome {user}!

这时再去看~,就会发现Dropbox文件夹,同步的文件即在此
4.下载dropbox.py,用以控制守护进程

wget https://www.dropbox.com/download?dl=packages/dropbox.py

罗列常用命令

dropbox.py start #启动
dropbox.py stop #停止
dropbox.py lansync n #停用局域网同步

简单翻译介绍,具体细节参见Dropbox

2011-11-24

在AIX5.3上安装redis

Filed under: 乱语 — 标签:, — hellyguo @ 13:21

[root@host/]uname -a
AIX margin 3 5 00C2F1DE4C00

http://www.perzl.org下载需要的软件包
安装命令如下:
rpm -ivh bash-4.2-5.aix5.1.ppc.rpm
rpm -ivh expat-2.0.1-3.aix5.1.ppc.rpm
rpm -ivh expat-devel-2.0.1-3.aix5.1.ppc.rpm
rpm -ivh gettext-0.17-1.aix5.1.ppc.rpm --nodeps
rpm -ivh glib2-2.28.6-1.aix5.1.ppc.rpm
rpm -ivh gettext-devel-0.17-1.aix5.1.ppc.rpm
rpm -ivh info-4.13a-2.aix5.1.ppc.rpm
rpm -ivh gmp-5.0.2-1.aix5.1.ppc.rpm
rpm -ivh gmp-devel-5.0.2-1.aix5.1.ppc.rpm
rpm -ivh popt-1.16-1.aix5.1.ppc.rpm
rpm -ivh popt-devel-1.16-1.aix5.1.ppc.rpm
rpm -ivh coreutils-8.14-1.aix5.1.ppc.rpm
rpm -ivh logrotate-3.7.9-2.aix5.1.ppc.rpm
rpm -ivh redis-2.2.11-1.aix5.2.ppc.rpm

2011-10-02

DB2下生成UNIX风格的timestamp

Filed under: 乱语 — 标签:, , — hellyguo @ 15:03

CAST (DAYS(CURRENT TIMESTAMP) - DAYS('1970-01-01') AS INTEGER) * 86400 + (MIDNIGHT_SECONDS(CURRENT TIMESTAMP – CURRENT TIMEZONE))

转自:dbForums

2011-10-01

Example.com服务器配置

Filed under: 乱语 — 标签:, , , , , , , , , — hellyguo @ 21:15

服务器为Dell PowerEdge 1950
安装Debian6作为操作系统
安装系统时,需要提前准备bnx2/bnx2-mips-06-5.0.0.j3.fw包(为non-free,故需要自行准备),下载路径是:debian.org

邮件服务器配置
1. 安装exim4/courier-pop
sudo apt-get install exim4 exim4-daemon-heavy courier-pop courier-pop-ssl
2. 安装sasl
sudo apt-get install sasl2-bin
3. 配置sasl,使之自启动
sudo vi /etc/default/saslauthd
START=yes #令其自启动
4. 安装SpamAssassin
sudo apt-get install spamassassin
5. 配置SpamAssassin,使之自启动
sudo vi /etc/default/spamassassin
ENABLE=1 #令其自启动
CRON=1 #令其在晚间自动更新过滤规则
6. 启动SpamAssassin
sudo /etc/init.d/spamassassin start
7. 安装ClamAV
sudo apt-get install clamav
8. 安装Greylistd
sudo apt-get install greylistd
9. 配置exim4
sudo dpkg-reconfigure exim4-config
选项提示
1) internet site
2) example.com
3) 留空
4) example.com
5) 留空
6) 留空
7) NO
8) Maildir
9) NO
10. 配置exim4自签证书
sudo /usr/share/doc/exim4/examples/exim-gencert

[*] Creating a self signed SSL certificate for Exim!
This may be sufficient to establish encrypted connections but for
secure identification you need to buy a real certificate!

Please enter the hostname of your MTA at the Common Name (CN) prompt!

Generating a 1024 bit RSA private key
………………………++++++
…………………++++++
writing new private key to ‘/etc/exim4/exim.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Code (2 letters) [US]:CN
State or Province Name (full name) []:Zhejiang
Locality Name (eg, city) []:Hangzhou
Organization Name (eg, company; recommended) []:example.com
Organizational Unit Name (eg, section) []:http://www.example.com
Server name (eg. ssl.domain.tld; required!!!) []:mail.example.com
Email Address []:webmaster@example.com
[*] Done generating self signed certificates for exim!
Refer to the documentation and example configuration files
over at /usr/share/doc/exim4-base/ for an idea on how to enable TLS
support in your mail transfer agent.
生成的证书位于/etc/exim4,名为exim.crt/exim.key。此处为默认位置,在下面步骤中将用到。如果不移动,则下面对证书路径不需要修改;如果进行移动,则需要修改证书路径

11. 配置exim4,使之支持STARTTLS及sasl认证
sudo adduser Debian-exim sasl
sudo /etc/init.d/saslauthd restart
sudo vi /etc/exim4/exim4.conf.template

a) 在.ifdef MAIN_TLS_ENABLE上方添加MAIN_TLS_ENABLE = yes
b) 确认上步的证书路径,已移动则修改
c) 在Authenticate against local passwords using sasl2-bin下方打开plain_saslauthd_server及login_saslauthd_server段的注释
12. 更新exim4的配置文件,并重启exim4
sudo update-exim4.conf
sudo /etc/init.d/exim4 restart

13. 设置每次创建用户时自动产生Maildir
sudo maildirmake /etc/skel/Maildir
sudo chmod 755 /etc/skel/Maildir

14. 测试配置
sudo apt-get install swaks
swaks -a -tls -q HELO -s localhost -au user -ap 'pwd'

=== Trying localhost:25…
=== Connected to localhost.
EHLO localhost
<- 250-localhost Hello localhost [127.0.0.1]
<- 250-SIZE 52428800
<- 250-PIPELINING
<- 250-STARTTLS
STARTTLS
EHLO localhost
<~ 250-localhost Hello localhost [127.0.0.1]
<~ 250-SIZE 52428800
<~ 250-PIPELINING
<~ 250-AUTH PLAIN LOGIN
QUIT
<~ 221 localhost closing connection
=== Connection closed with remote host.

15. 在Exim4中启用Greylistd
sudo greylistd-setup-exim4 add
sudo update-exim4.conf
sudo /etc/init.d/exim4 restart

16. 在Exim4中启用SpamAssassin
sudo vi /etc/exim4/exim4.conf.template
sudo update-exim4.conf
sudo /etc/init.d/exim4 restart

a) 查找spamd_address = 127.0.0.1,解开此行注释
b) 查找Add headers to a message if it is judged to be spam.,解开下方的warn块
17. 配置Courier证书。默认Courier的证书信息为虚构信息,需要按服务器配置Courier-POP的证书
sudo vi /etc/courier/pop3d.cnf

RANDFILE = /usr/lib/courier/pop3d.rand

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
C=CN
ST=Zhejiang
L=Hangzhou
O=example.com
OU=http://www.example.com
CN=mail.example.com
emailAddress=webmaster@example.com

[ cert_type ]
nsCertType = server

18. 生成证书
sudo rm –rf /etc/courier/pop3d.pem
sudo rm –rf /usr/lib/courier/pop3d.pem
sudo mkpop3dcert
sudo mv /usr/lib/courier/pop3d.pem /etc/courier
cd /usr/lib/courier
sudo ln –s /etc/courier/pop3d.pem pop3d.pem

Generating a 1024 bit RSA private key
..++++++
………………………++++++
writing new private key to ‘/usr/lib/courier/pop3d.pem’
—–
1024 semi-random bytes loaded
Generating DH parameters, 512 bit long safe prime, generator 2
This is going to take a long time
…+………+…….+…………..+……….+……………………………..+.+…+…+…………………….+…+……+……….+…………………………………………+……………………..+……………………………………………………………..+………….+…………+…+…..+…..+………….+…………………..+..+……..+………..+….+…..+……………………………..+…………….+………………+……………….+.+……………………………..+………+……..+………………………………+…………………+…….+.+…+……………………….+………………….+………………….+………+………………………..+..+……………………………………………………………+………….+…..++*++*++*++*++*++*
subject= /C=CN/ST=Zhejiang/L=Hangzhou/O=example.com/OU=http://www.example.com/CN=mail.example.com/emailAddress=webmaster@example.com
notBefore=Sep 29 14:35:10 2011 GMT
notAfter=Sep 28 14:35:10 2012 GMT
SHA1 Fingerprint=38:A1:30:3A:3F:F3:5F:B6:25:BF:8C:9E:C9:BF:91:DB:FE:EA:13:5C

19. 配置Courier-POP
sudo vi /etc/courier/pop3d
POP3AUTH=””改为POP3AUTH=”LOGIN PLAIN”
POP3AUTH_TLS=””改为POP3AUTH_TLS=”LOGIN PLAIN”
20. 重启Courier-POP
sudo /etc/init.d/courier-pop restart
sudo /etc/init.d/courier-pop-ssl restart

21. 服务器DNS设置
a) 将域名example.com的MX地址指向mail.example.com
b) 将mail.example.com指向1.2.3.4
22. 客户端设置
POP3
mail.example.com,采用SSL/TLS,普通密码
SMTP
mail.example.com,采用STARTTLS,普通密码
VPN服务器配置
1. 配置步骤:
a) sudo apt-get install pptpd
b) sudo vi /etc/pptpd.conf
将localip和remoteip进行设置
c) sudo vi /etc/ppp/pptpd-options
开启ms-dns
d) sudo vi /etc/ppp/chap-secrets
添加用户名密码
e) sudo vi /etc/sysctl.conf
开启net.ipv4.ip_forward=1
f) sudo sysctl -p
g) sudo /etc/init.d/pptpd restart
2. 客户端设置
XP 网络连接,新建连接,连接工作场所,虚拟专用网络,example,不初始拨号,www.example.com
用户名密码待分配
iptables设置
1. 编写setIptables,位于/home/opuser/bin,如下:

#!/bin/sh

#清除表
sudo iptables -F INPUT
sudo iptables -F OUTPUT
sudo iptables -F FORWARD

#设置默认
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

#允许本地网卡通讯
sudo iptables -A INPUT -i lo -j ACCEPT

#允许已建立连接的连接
sudo iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

#允许DNS
sudo iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp -m state –state NEW -m udp –dport 53 -j ACCEPT

#允许ping
sudo iptables -A INPUT -p icmp -m icmp –icmp-type any -j ACCEPT

#允许telnet
#sudo iptables -A INPUT -p tcp -m tcp –dport 23 -j ACCEPT

#允许ssh
sudo iptables -A INPUT -p tcp -m tcp –dport 22 -j ACCEPT

#允许http
#sudo iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT

#允许mail
sudo iptables -A INPUT -p tcp -m tcp –dport 25 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp –dport 110 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp –dport 143 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp –dport 465 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp –dport 993 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp –dport 995 -j ACCEPT

#启用VPN
sudo iptables -A INPUT -p tcp –dport 1723 -j ACCEPT
sudo iptables -A INPUT -p tcp –dport 47 -j ACCEPT
sudo iptables -A INPUT -p gre -j ACCEPT
# for dynamic ip(ADSL etc.)
#sudo iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE
# for static ip
sudo iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j SNAT –to 1.2.3.4
sudo iptables -A FORWARD -p tcp –syn -s 192.168.100.0/24 -j TCPMSS –set-mss 1356

#保存
sudo iptables-save > /tmp/iptables-settings
sudo mv /tmp/iptables-settings /etc/iptables-settings
#启用
sudo iptables-restore < /etc/iptables-settings
2. 在系统启动时自动加载iptables规则
sudo vi /etc/network/if-pre-up.d/iptables
sudo chmod +x /etc/network/if-pre-up.d/iptables

iptabls内容

#!/bin/sh
/sbin/iptables-restore < /etc/iptables-settings

3. 测试

Windows版本DB2登录时报“SQL30082N USERID DISABLED or RESTRICTED”

Filed under: 乱语 — 标签:, , — hellyguo @ 20:50

Windows版本的db2,通过db2cmd登录时报:SQL30082N USERID DISABLED or RESTRICTED
在我这里出现此问题的原因是,我在组策略中封闭了db2admin账户的网络访问权(计算机配置->Windows 设置->安全设置->本地策略->用户权利指派,“拒绝从网络访问这台计算机”中添加了db2admin)。
删除即可。

Older Posts »

%d 博主赞过: