简介:
用户输入用户名、密码和验证码,识别成功则登入,失败则返回登录页面并提示错误信息。
登录案例的代码请参考: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>
<script>
function change(){
var img = document.getElementById("img");
img.src = "/day0422/CodeServlet?date=" + new Date().getTime();
}
</script>
</head>
<body>
<%
String err = "";
String msg = (String)request.getAttribute("msg");
if (msg!=null){
err = msg;
}
String username = (String)session.getAttribute("username");
String password = (String)session.getAttribute("password");
%>
<div align="center">
<font color="red"><b><%=err %></b></font>
<form action="/day0422/LoginServlet" method="post">
用户名:<input type="text" name="username" value=<%if(username!=null) {out.print(username);} %>><br/>
密码 :<input type="text" name="password" value=<%if(password!=null) {out.print(password);} %>><br/>
请输入:<input type="text" name="code" size="3">
<img id="img" src="/day0422/CodeServlet"><a href="javascript:change()">换一张</a>
<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
如果验证码不匹配(上面验证码识别不区分大小写):
改了一下,可以实现换一张验证码的功能:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)