首页 / 软件开发 / JAVA / SpringSide开发实战(五):兵马未动,粮草先行
SpringSide开发实战(五):兵马未动,粮草先行2011-05-07 blogjava 海边沫沫本篇讨论的问题是对项目中遇到的难题进行技术穿刺。做过项目的人都知道,在构思完一个项目的功能之后,紧接着的事情就是考虑这些构思 的功能如何实现,对于自己不熟悉的领域,要进行技术穿刺。我的穿刺方法为先查找有无比 较好的开源组件可用,如果没有,就查找相关的文档,自己编写和测试代码。在这一篇,我主要解决三个问题。1、解决字符串加密的问题,在前面一篇中,我们设计用户模块的时候,准备将用户的密 码字段以MD5加密的方式保存,因此,这里需要写一个对字符串加密生成MD5字符串的方法;2、解决生成图像缩略图和生成验证码的问题;3、解决url重写的问题,之所以要用到url重写,主要是为了让用户在访问自己的主页时 ,可以使用http://www.xkland.com/username或者http://username.xkland.com这样的形式 ,而不是像http://www.xkland.com/index.jsp?username=xxx这样难看的形式。需要说明的是,要解决上面的三个问题,不是没有开源的东西可用,而是我觉得每次都 要整合不同的组件是在是太麻烦,而我们需要的功能也不是很复杂,我们不需要太通用的东 西,只要能够解决这里特定的问题就行了,因此不如自己动手实现,同时还可以获得技术上 的提高。首先来看看MD5加密的问题,JDK中本来提供有数据加密的支持,其中 java.security.MessageDigest类就可以实现MD5的加密,但是,加密后生成的数据是byte[] 类型的,这里只需要写一个方法将它转换为字符串就行,代码如下:package com.xkland.util;
import java.security.MessageDigest;
import java.lang.NullPointerException;
import java.security.NoSuchAlgorithmException;
public class StringUtil {
public static char [] num_chars = new char [] { " 0 " ,
" 1 " , " 2 " , " 3 " , " 4 " , " 5 " , " 6 " , " 7 " , " 8 " ,
" 9 " , " A " , " B " , " C " , " D " , " E " , " F " } ;
public static String toMD5String(String input)
throws NullPointerException,NoSuchAlgorithmException {
if (input == null ) throw new NullPointerException();
char [] output = new char [ 32 ];
MessageDigest md = MessageDigest.getInstance( " MD5 " );
byte [] by = md.digest(input.getBytes());
for ( int i = 0 ;i < by.length;i ++ ) {
output[ 2 * i] = num_chars[ (by[i] & 0xf0 ) >> 4 ];
output[ 2 * i + 1 ] = num_chars[ by[i] & 0xf ];
}
return new String(output);
}
}