package cn.lnu.form;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import sun.misc.BASE64Encoder;
//���ó��������������Ϊ������һ�������
public class FormServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//����һ�������(����)
TokenProcessor tp=TokenProcessor.getInstance();
String token=tp.generateToken();
//��ת��jsp�и��û����һ����
//��ν����Ŵ���jsp��ʹ��session����ȥ
HttpSession session=request.getSession();
session.setAttribute("token", token);
request.getRequestDispatcher("/form.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
class TokenProcessor{//�������������Token���ƣ�Ϊ�˱�֤����������Ϊ��һ�ģ����Խ�������Ʒ�������Ƴɵ�����
/*
* 1,�ѹ��캯��˽��
* 2���Լ�����һ��
* 3�����Ⱪ¶һ�������������ȡ���洴���Ķ���
* */
private TokenProcessor(){
}
private static final TokenProcessor instance=new TokenProcessor();
public static TokenProcessor getInstance(){
return instance;
}
public String generateToken(){//���ݵ�ǰʱ�����ֵ�Լ�һ����������õ�һ��Ψһ�������
String token=System.currentTimeMillis()+new Random().nextInt()+"";
//�������������һ�£���Ҫ��������ָ��/ժҪ���̶�128λ
try {//�������128λ����ժҪ��һ�㲽��
MessageDigest md=MessageDigest.getInstance("md5");
byte[] md5=md.digest(token.getBytes());
//Ϊ�˷�ֱֹ�ӹ���string���ص��������������봮����Ҫ����base64���룬����md5�����е�ÿ�����ֽ�ת�����ĸ��ֽڣ������������ֽڱ��浽�ĸ��ֽ���
//��ô�ĸ��ֽڵ�ÿ���ֽڱ���ԭ�������ֽڵ�6λ����ÿ�����ֽ�תΪ�ĸ��ֽ�֮�����ĸ��ֽڵ����ݵ��ص��ǣ�ÿ���ֽڵ���Чλֻ�Ǻ���λ��ǰ��λ���㣬��ôÿ���ֽڵ�
//��Χ��00000000--00111111��0~63��,��ôһת�룬��ô�ĸ��ֽڵ�ÿ���ֽڶ�Ӧ���ַ�����������Ϥ�Ŀɼ����ַ�
BASE64Encoder encoder=new BASE64Encoder();
return encoder.encode(md5);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}