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);

	}



}


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(session)