java_利用session校验图片认证码
RegisterServlet:检验server,client验证码是否一致
ImageServlet: 产生验证码
<!DOCTYPE html> <html> <head> <title>Register.html</title> <script type="text/javascript"> function ChangeImage(img){ img.src=img.src+"?"+new Date().getTime(); } </script> </head> <body> <form action="/NANA/servlet/RegisterServlet"> 用户名:<input type="text" ><br /> 密码:<input type="text"><br /> 认证码:<input type="text" name="checkcode"><img alt="" src="/NANA/servlet/ImageServlet" onclick="ChangeImage(this)" alt="change" style="cursor:pointer"><br/> <input type="submit" value="submit"> </form> </body> </html>
RegisterServlet:
public class RegisterServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String c_checkcode = request.getParameter("checkcode"); String s_checkcode = (String) request.getSession().getAttribute("checkcode"); if(c_checkcode!=null&&s_checkcode!=null&&c_checkcode.equals(s_checkcode)){ System.out.println("处理请求"); }else{ System.out.println("认证码错误"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
ImageServlet
public class ImageServlet extends HttpServlet { private static final int WIDTH = 120; private static final int HEIGHT = 25; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); setBackGround(g); setBorder(g); drawRandomLine(g); String random = drawRandmNumber((Graphics2D) g); // add into server checkcode request.getSession().setAttribute("checkcode", random); response.setContentType("image/jpeg"); response.setDateHeader("expries", -1); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); ImageIO.write(image, "jpg", response.getOutputStream()); } private String drawRandmNumber(Graphics2D g) { // TODO Auto-generated method stub g.setColor(Color.RED); g.setFont(new Font("宋体", Font.BOLD, 20)); StringBuffer sb = new StringBuffer(); int x = 5; for (int i = 0; i < 4; i++) { int degree = new Random().nextInt() % 30; String num = (new Random().nextInt(10)) + ""; sb.append(num); g.rotate(degree * Math.PI / 180, x, 20); g.drawString(num, x, 20); g.rotate(-degree * Math.PI / 180, x, 20); x += 30; } return sb.toString(); } private void drawRandomLine(Graphics g) { // TODO Auto-generated method stub g.setColor(Color.GREEN); for (int i = 0; i < 5; i++) { int x1 = new Random().nextInt(WIDTH); int y1 = new Random().nextInt(HEIGHT); int x2 = new Random().nextInt(WIDTH); int y2 = new Random().nextInt(HEIGHT); g.drawLine(x1, y1, x2, y2); } } private void setBackGround(Graphics g) { // TODO Auto-generated method stub g.setColor(Color.WHITE); g.fillRect(0, 0, WIDTH, HEIGHT); } private void setBorder(Graphics g) { // TODO Auto-generated method stub g.setColor(Color.BLUE); g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }