月度归档:2011年12月

svn更新报错

svn: Can’t convert string from ‘UTF-8’ to native encoding:
svn: xmas-bottom-logo – ?\229?\137?\175?\230?\156?\172.png

Linux终端字符显示问题,执行命令:

export LANG=”zh_CN.UTF-8″

然后再次更新即可,果然发现中文出现在名字中:

svn up –force
A xmas-bottom-logo – 副本.png
Updated to revision 1276.

用Jsoup对用户输入内容的HTML安全过滤

在网站使用input或textarea提供给用户可输入内容的功能,比如发帖子,发文章,发评论等等。这时候需要后端程序对输入内容作安全过滤,比如<script>等可造成安全隐患的标签。

java中有个开源包叫Jsoup,本身用来解析html,xml文档的,特点是可以使用类似jquery的选择权语法。

最近在解决内容安全过滤的时候,通过google发现Jsoup通过自定义Whitelist(安全标签白名单)提供了这样的功能,非常好用。

Continue reading 用Jsoup对用户输入内容的HTML安全过滤

Nginx Rewrite的规则

来源,未验证,参考即可:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/

在新主机的迁移过程中,最大的困难就是WP permalink rewrite的设置.

因为旧主机是用的Apache, 使用的是WP本身就可以更改的.htaccess,没有太大的难度.而这次在VPS上跑的是Nginx,主要是因为Nginx的速度比Apache要快很多.

但是另一方面就不是那么舒服了,因为Nginx的rewrite跟Apache不同,而且是在服务器上面才能更改.

下面是其间的一些研究笔记.(以下用例如无特别说明均摘自nginx wiki)

Continue reading Nginx Rewrite的规则

ubuntu mongodb安装及备份与恢复

使用命令

apt-key adv –keyserver keyserver.ubuntu.com –recv 7F0CEB10

然后编辑源:

vi /etc/apt/sources.list

增加一行:

deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen

然后更新并安装:

apt-get update

apt-get install mongodb-10gen

这样安装下来就是最新稳定版本。

导出数据库:

mongodump -h localhost –db database_name -o /home/backup

注意-o参数是目录,然后恢复数据:

mongorestore -h localhost –db database_name –directoryperdb /home/backup

由于导出后的数据库是多个.bson文件 ,可以打包方便保存或传输:

tar -zcvf  ./dump-name.tar.gz  /home/backup

Nginx配置带www域名转向无www域名

参考:

http://chinaapp.sinaapp.com/?p=774

http://b.lesseverything.com/2008/4/9/redirect-from-www-to-non-www-using-nginx

 

比如配置访问www.cssor.com转向cssor.com, 如下:

server {
    listen 80;
    server_name www.cssor.com cssor.com;
    if ($host = 'www.cssor.com' ) {
        rewrite ^/(.*)$ http://cssor.com/$1 permanent;
    }
}

#或者,所有的非顶级域名都转过来

    if ($host != 'cssor.com' ) {
        rewrite ^/(.*)$ http://cssor.com/$1 permanent;
    }

请注意一点$host = ‘www.cssor.com’,这里是一个等号不是两个等号,否则重启nginx会报错:
Restarting nginx: nginx: [emerg] unexpected “==” in condition in 。。。
网上资料坑爹呢。。。

另外if和()之间应该有空格,紧贴会报了一个错出来:
Restarting nginx: nginx: [emerg] unknown directive “if($host” in 。。。。

被忽视的servlet filter配置参数dispatcher

最近项目遇到一种情况,偶坚持index.jsp采用forward跳转到action,而另一位同事发现这种方式没进入他写的一个filter,导致出现一些未被过滤的问题,于是被改成redirect方式,以便进入过滤器。

访问首页被redirect,懂的自然懂,相当于每次访问首页发了两次请求,对于首页这种访问量相当大的页面,相当不利。

其实我们都忽视了filter一个配置参数:dispatcher,因为默认filter只过滤拦截redirect request , 对于forward(服务器端跳转)不处理。而dispatcher就是解决问题之道。

dispatcher的描述如下:

Element : dispatcher
Data Type : string
Enumerated Values :
– FORWARD
– INCLUDE
– REQUEST
– ASYNC
– ERROR

可用值有5个,有经验的一看就明白,所以知道这些以后,项目里面的问题可以很容易解决掉,只需要配置如下即可:

<filter-mapping>
    <filter-name>test</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <!-- 可以配置多个dispatcher -->
</filter-mapping>

Java进行MD5加密

直接上代码,JDK6已经有一个方便点的类帮助简化步骤:

package com.cssor.test;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
	/** 
     * MD5 加密 
     */  
    private static String getMD5Str(String str) {  
        MessageDigest messageDigest = null;  

        try {  
            messageDigest = MessageDigest.getInstance("MD5");  

            messageDigest.reset();  

            messageDigest.update(str.getBytes("UTF-8"));  
        } catch (NoSuchAlgorithmException e) {  
            System.out.println("NoSuchAlgorithmException caught!");  
            System.exit(-1);  
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
        }  

        byte[] byteArray = messageDigest.digest();  

        StringBuffer md5StrBuff = new StringBuffer();  

        for (int i = 0; i < byteArray.length; i++) {              
            if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)  
                md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));  
            else  
                md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));  
        }  

        return md5StrBuff.toString();  
    }  

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.err.println(MD5.getMD5Str("a"));
	}

}

来源: http://warren.iteye.com/blog/107386

当前CSS抒写习惯

保持了火狐工程师推荐的属性书写顺序习惯:

/* mozilla.org Base Styles
* maintained by fantasai
* (classes defined in the Markup Guide - http://mozilla.org/contribute/writing/markup )
*/
/* Suggested order:
//显示属性
* display
* list-style
* position
* float
* clear
//自身属性
* margin
* padding
* width
* height
* border
* background
//文本属性
* color
* font
* text-decoration
* text-align
* vertical-align
* white-space
* other text
* content
*
*/

 

惯用的css reset写法及常用类:

Continue reading 当前CSS抒写习惯

支付宝账号有效性验证之猥琐方法

在支付宝注册页面找到ajax验证账号的地址: https://lab.alipay.com/user/reg/acctStatusCheck.json,firebug检查需要post的参数,然后在本地写了个servlet代理请求这个地址,实现本地服务验证。

就是不知道有米有什么后遗症。。。反正先用了再说,没在官方找到相应的API验证方法。

参考资料:http://www.java-samples.com/java/POST-toHTTPS-url-free-java-sample-program.htm

最终修改代码如下,需要依赖第三方json解析包fastJSON,google即可得之,应用服务器需要tomcat7+,因为用了注解配置servlet:

Continue reading 支付宝账号有效性验证之猥琐方法