1. 程式人生 > 其它 >015.session驗證碼登陸案例

015.session驗證碼登陸案例

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.*;
import
java.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>