JSP使用者登入(隨機驗證碼版)
阿新 • • 發佈:2022-04-22
簡介:
使用者輸入使用者名稱、密碼和驗證碼,識別成功則登入,失敗則返回登入頁面並提示錯誤資訊。
登入案例的程式碼請參考:https://www.cnblogs.com/0099-ymsml/p/16175101.html
生成隨機驗證碼的類請參考:https://www.cnblogs.com/0099-ymsml/p/16179879.html
CodeServlet: 獲取驗證碼的文字資訊
package demoServlet;
import java.awt.image.BufferedImage;
import java.io.IOException;
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 demoClass.Verify;
@WebServlet("/CodeServlet")
public class CodeServlet extends HttpServlet {
private Verify vc = new Verify();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 生成圖片
* 儲存圖片上的文字到session中
* 把圖片響應給客戶端
*/
BufferedImage image = vc.getImage(); // 獲取一張圖片的流
// 將圖片的文字儲存到session中
String text = vc.getText();
HttpSession session = request.getSession();
session.setAttribute("text", text);
// 輸出流輸出圖片
Verify.output(image, response.getOutputStream());
}
}
LoginServlet:登入資訊驗證
package demoServlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 設定編碼
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 獲取使用者名稱和密碼
String username = request.getParameter("username");
String password = request.getParameter("password");
// 獲取驗證碼
String code = request.getParameter("code");
// 獲取session
HttpSession session = request.getSession();
// 獲取圖片文字
String text = (String) session.getAttribute("text");
// 校驗使用者名稱和密碼
if ("cdml".equals(username)) { // 判斷使用者名稱
if ("qwe".equals(password)) { // 判斷密碼
if (!text.equalsIgnoreCase(code)) { // 驗證碼不正確
request.setAttribute("msg", "驗證碼錯誤"); // 記錄錯誤的驗證碼
request.getRequestDispatcher("/jsp/login.jsp").forward(request, response); // 返回登入頁面
} else { // 當驗證碼正確
// 使用者名稱、密碼和驗證碼都正確,設定使用者名稱、密碼和驗證碼
session.setAttribute("username", username);
session.setAttribute("password", password);
session.setAttribute("code", code);
// 設定Cookie
Cookie cookie = new Cookie("username", username);
cookie.setMaxAge(60 * 60 * 24); // cookie有效時間為一天
response.addCookie(cookie); // 新增cookie
response.sendRedirect("/day0422/jsp/source1.jsp"); // 重定向到source1.jsp
}
} else {
// 設定錯誤密碼
request.setAttribute("msg", "密碼錯誤");
// 轉發
request.getRequestDispatcher("/jsp/login.jsp").forward(request, response);
}
} else {
// 設定錯誤使用者名稱
request.setAttribute("msg", "使用者名稱錯誤");
// 轉發
request.getRequestDispatcher("/jsp/login.jsp").forward(request, response);
}
}
}
login.jsp:登入頁面
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登入</title>
</head>
<body>
<%
String err = "";
String msg = (String)request.getAttribute("msg");
if (msg!=null){
err = msg;
}
%>
<div align="center">
<font color="red"><b><%=err %></b></font>
<form action="/day0422/LoginServlet" method="post">
使用者名稱:<input type="text" name="username" value=<%=session.getAttribute("username") %>><br/>
密碼 :<input type="text" name="password" value=<%=session.getAttribute("password") %>><br/>
請輸入:<input type="text" name="code" size="3">
<img src="/day0422/CodeServlet">
<br/>
<input type="submit" value="登入">
</form>
</div>
</body>
</html>
source1.jsp:登入成功頁面
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>title</title>
</head>
<body>
<h1>驗證成功!</h1>
<b>使用者:<%=request.getSession().getAttribute("username") %></b>
<b>您的密碼為:<%=request.getSession().getAttribute("password") %></b>
<b>您的驗證碼為:<%=request.getSession().getAttribute("code") %></b>
</body>
</html>
訪問login.jsp頁面
訪問成功並跳轉到source1.jsp
如果驗證碼不匹配(上面驗證碼識別不區分大小寫):