015.session驗證碼登陸案例
阿新 • • 發佈:2021-08-30
package com.identifycode.servlet; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; importjava.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; /** * 1.驗證碼的工具包 */ @WebServlet("/checkCodeServlet") public class CheckCodeServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int width = 100; int height = 50; //1.建立一物件,在記憶體中圖片(驗證碼圖片物件) BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //2.美化圖片 //2.1 填充背景色 Graphics g = image.getGraphics();//畫筆物件 g.setColor(Color.PINK);//設定畫筆顏色 g.fillRect(0,0,width,height);//2.2畫邊框 g.setColor(Color.BLUE); g.drawRect(0,0,width - 1,height - 1); String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789"; //生成隨機角標 Random ran = new Random(); StringBuilder sb = new StringBuilder(); for (int i = 1; i <= 4; i++) { int index = ran.nextInt(str.length()); //獲取字元 char ch = str.charAt(index);//隨機字元 sb.append(ch); //2.3寫驗證碼 g.drawString(ch+"",width/5*i,height/2); } String checkCode_session = sb.toString(); //將驗證碼存入session request.getSession().setAttribute("checkCode_session",checkCode_session); //2.4畫干擾線 g.setColor(Color.GREEN); //隨機生成座標點 for (int i = 0; i < 10; i++) { int x1 = ran.nextInt(width); int x2 = ran.nextInt(width); int y1 = ran.nextInt(height); int y2 = ran.nextInt(height); g.drawLine(x1,y1,x2,y2); } //3.將圖片輸出到頁面展示 ImageIO.write(image,"jpg",response.getOutputStream()); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); } }
package com.identifycode.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @WebServlet("/loginServlet") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.設定request編碼 request.setCharacterEncoding("utf-8"); //2.獲取引數 String username = request.getParameter("username"); String password = request.getParameter("password"); String checkCode = request.getParameter("checkCode"); //3.先獲取生成的驗證碼 HttpSession session = request.getSession(); String checkCode_session = (String) session.getAttribute("checkCode_session"); //刪除session中儲存的驗證碼 session.removeAttribute("checkCode_session"); //3.先判斷驗證碼是否正確,驗證碼不區分大小寫 if (checkCode_session != null && checkCode_session.equalsIgnoreCase(checkCode)) { //忽略大小寫比較 //驗證碼正確 //判斷使用者名稱和密碼是否一致 if ("123".equals(username) && "123".equals(password)) {//需要呼叫UserDao查詢資料庫 //登入成功 //儲存資訊,使用者資訊 session.setAttribute("user", username); //重定向到success.jsp response.sendRedirect(request.getContextPath() + "/index.jsp"); } else { //登入失敗 //儲存提示資訊到request request.setAttribute("login_error", "使用者名稱或密碼錯誤"); //轉發到登入頁面 request.getRequestDispatcher("/login.jsp").forward(request, response); } } else { //驗證碼不一致 //儲存提示資訊到request request.setAttribute("cc_error", "驗證碼錯誤"); //轉發到登入頁面 request.getRequestDispatcher("/login.jsp").forward(request, response); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2021/8/30 Time: 16:50 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <script> window.onload = function () { document.getElementById("img").onclick = function () { this.src = "/checkCodeServlet?time=" + new Date().getTime(); } } </script> <style> div { color: red; } </style> </head> <body> <form action="/loginServlet" method="post"> <table> <tr> <td>使用者名稱</td> <td><input type="text" name="username"></td> </tr> <tr> <td>密碼</td> <td><input type="password" name="password"></td> </tr> <tr> <td>驗證碼</td> <td><input type="text" name="checkCode"></td> </tr> <tr> <td colspan="2"><img id="img" src="/checkCodeServlet"></td> </tr> <tr> <td colspan="2"><input type="submit" value="登入"></td> </tr> </table> </form> <div><%=request.getAttribute("cc_error") == null ? "" : request.getAttribute("cc_error")%></div> <div><%=request.getAttribute("login_error") == null ? "" : request.getAttribute("login_error") %></div> </body> </html>
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2021/8/30 Time: 16:22 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <h1><%=request.getSession().getAttribute("user")%>,歡迎您</h1> </body> </html>