【web案例】趙雅智_校驗驗證碼
阿新 • • 發佈:2019-02-14
- RandomImage.java
- 儲存src
- 獲取到src,把src寫進去,把數字追加到字元緩衝區,把字元緩衝區內容返回給呼叫者,在方法前加返回值
- 此方法有String返回值
- 返回值
- 呼叫setRandouNum()方法時,獲取驗證碼內容
- 獲取session驗證碼是什麼放到session裡
- LoginServlet.java
- 獲取填寫的驗證碼
- 與session裡的值比較
- 判斷驗證碼是否一致
- 設定字符集
- login,html
- 驗證碼看不清點選圖片重新整理
主頁面:login.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>login.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <form action="/bookCookie/LoginServlet" method="post"> 使用者名稱:<input type="text" name="username"><br/><br/> 密碼:<input type="password" name="password"><br/><br/> 驗證碼<input type="text" name="checkcode"><br> <img src="./RandomImage"><br/><br/> <input type="submit" value="登入"> </form> </body> </html>
新建servlet
RandomImage.java
package com.hbsi.session; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RandomImage extends HttpServlet { public static final int WIDTH = 130; public static final int HEIGHT = 30; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); setBackGrount(g); setBorder(g); setRandomLine(g); // 5.呼叫setRandouNum()方法時,獲取驗證碼內容 String checkcode = setRandomNum(g); // 6.獲取session驗證碼是什麼放到session裡 request.getSession().setAttribute("imgcode", checkcode); response.setContentType("image/jpeg"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setIntHeader("Expires",-1); ImageIO.write(image,"JPEG",response.getOutputStream()); } //產生驗證碼 // 3.此方法有String返回值 private String setRandomNum(Graphics g) { // TODO Auto-generated method stub //g.setColor(Color.BLACK); g.setFont(new Font("宋體",Font.BOLD,20)); Random random = new Random(); // 1.儲存src StringBuffer sb = new StringBuffer(); int x=10; for(int i=0;i<4;i++){ //產生隨機數 String str = String.valueOf(random.nextInt(10)); // 2.獲取到src,把src寫進去,把數字追加到字元緩衝區,把字元緩衝區內容返回給呼叫者,在方法前加返回值 sb.append(str); g.setColor(new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255))); int degree = random.nextInt()%30; ((Graphics2D)g).rotate(degree*Math.PI/180, x, 20); g.drawString(str, x, 20); ((Graphics2D)g).rotate(-degree*Math.PI/180, x, 20); x +=30; } // 4.返回值 return sb.toString(); } private void setRandomLine(Graphics g) { // TODO Auto-generated method stub g.setColor(Color.blue); Random random = new Random(); for(int i=0;i<5;i++){ int x1 = random.nextInt(WIDTH); int y1 = random.nextInt(HEIGHT); int x2 = random.nextInt(WIDTH); int y2 = random.nextInt(HEIGHT); g.drawLine(x1, y1, x2, y2); } } private void setBorder(Graphics g) { // TODO Auto-generated method stub g.setColor(Color.BLUE); g.drawRect(1, 1, WIDTH-2, HEIGHT-2); } private void setBackGrount(Graphics g) { // TODO Auto-generated method stub g.setColor(Color.PINK); g.fillRect(0, 0, WIDTH, HEIGHT); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
新建LoginServlet
package com.hbsi.session; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.hbsi.dao.UserDao; import com.hbsi.dao.UserDaoImpl; import com.hbsi.domian.User; public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 10.設定字符集 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String password = request.getParameter("password"); // 7.獲取填寫的驗證碼 String checkcode = request.getParameter("checkcode"); // 8.與session裡的值比較 String imgcode = (String) request.getSession().getAttribute("imgcode"); // 9.判斷驗證碼是否一致 if(checkcode!=null && imgcode!=null && checkcode.equals(imgcode)){ //處理登陸請求 UserDao ud = new UserDaoImpl(); User user = ud.find(username, password); if(user!=null){ request.getSession().setAttribute("user",user); response.sendRedirect("/bookCookie/IndexServlet"); } out.print("使用者名稱密碼錯"); }else{ out.print("驗證碼錯誤!!!"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
驗證碼看不清點選圖片重新整理
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript">
function change(img){
img.src = img.src +"?"+ new Date().getTime();
}
</script>
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<form action="/bookCookie/LoginServlet" method="post">
使用者名稱:<input type="text" name="username"><br/><br/>
密碼:<input type="password" name="password"><br/><br/>
驗證碼<input type="text" name="checkcode"><br>
<img src="./RandomImage" onclick="change(this)"><br/><br/>
<input type="submit" value="登入">
</form>
</body>
</html>
點選粉色圖片後: