Java 之 Session 包含验证码登录案例
需求:
1. 访问带有验证码的登录页面login.jsp
2. 用户输入用户名,密码以及验证码。
如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误
如果验证码输入有误,跳转登录页面,提示:验证码错误
如果全部输入正确,则跳转到主页success.jsp,显示:用户名,欢迎您
分析:

代码实现:
login.jsp 页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
<script> window.onloa = function() {
// 刷新验证码
document.getElementById("img").onclick = function() {
this.src = "/day13/checkcodeservletdemo"+new Date().getTime();
}
}
</script>
<style> div {
color:red;
}
</style> <body>
<form action="/day13/loginservletdemo" 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="/day13/checkcodeservletdemo"></td>
</tr> <tr>
<td colspan="2"><input type="submit" value="登录"></td>
</tr>
</table> <div><%=request.getAttribute("cc_error") == null ? "":request.getAttribute("cc_error") %></div>
<div><%=request.getAttribute("login_error") == null ? "":request.getAttribute("login_error") %></div> </form>
</body>
</html>
success 页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功</title>
</head>
<body>
<h1><%=request.getSession().getAttribute("user")%>,欢迎您</h1> </body>
</html>
生成验证码 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; @WebServlet("/checkcodeservletdemo")
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_BGR); // 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 < 6; 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 将图片输出到页面展示:通过response 的 字符流,将图片输出到浏览器上
ImageIO.write(image,"jpg",response.getOutputStream());
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
登录 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("/loginservletdemo")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 设置编码
request.setCharacterEncoding("utf-8");
// 2. 获取参数
//Map<String, String[]> map = request.getParameterMap(); 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"); // 判断,忽略大小写
if(checkCode_session!= null && checkCode_session.equalsIgnoreCase(checkcode)) {
//验证码正确
// 判断用户名和密码是否一致
if("zhangsan".equals(username) && "123".equals(password)) {
// 登录成功
// 存储用户信息 session.setAttribute("user",username);
// 重定向到 success.jsp
response.sendRedirect(request.getContextPath()+"/success.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);
}
}
Java 之 Session 包含验证码登录案例的更多相关文章
- Java IO流操作(III)——File类&案例一:输出制定目录下所有java文件名(包含子目录)&案例二:删除指定的目录(包含子目录)
1. File常用的构造 File file = new File("字符串路径"); File f = new File("D:\\a\\b.txt"); F ...
- java通过HtmlUnit工具和J4L实现模拟带验证码登录
1.HtmlUnit 1.1介绍 HtmlUnit是一个用java编写的无界面浏览器,建模html文档,通过API调用页面,填充表单,点击链接等等.如同正常浏览器一样操作.典型应用于测试以及从网页抓取 ...
- Java基础:String类详解,案例用户登录实现,案例手机号截取实现,案例敏感词替换实现;StringBuilder类详解,StringBuilder和String相互转换,附练习案例.
1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK ...
- Android(java)学习笔记212:中文乱码的问题处理(qq登录案例)
1.我们在之前的笔记中LoginServlet.java中,我们Tomcat服务器回复给客户端的数据是英文的"Login Success","Login Failed&q ...
- Android(java)学习笔记155:中文乱码的问题处理(qq登录案例)
1. 我们在之前的笔记中LoginServlet.java中,我们Tomcat服务器回复给客户端的数据是英文的"Login Success","Login Failed& ...
- Java中SSM+Shiro系统登录验证码的实现方法
1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; im ...
- Django(十六)基于模板的登录案例:登录装饰器、csrf攻击方式及防护、ajax的Post 的csrf开启写法、生成验证码、加验证码登录、反向解析+传参
一.csrf攻击 1.1 csrf攻击(跨站请求伪造) [csrf攻击即]:通过第3方网站,伪造请求(前提条件是你已经登录正常网站,并保存了session或cookie登录信息且没有退出),第三方网站 ...
- 黑马程序员IDEA版JAVA基础班\JavaWeb部分视频\2-10Request和Response\第5节 request登录案例
用户登录案例需求: 1.编写login.html登录页面 username & password 两个输入框 2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表 ...
- 简单的行为控制管理方法,自动登录,session定时验证码过期
代码很简单 实现的方式很多,用cookies 用static 变量 file文件缓存 等等 比如 //简单行为管理,如果请求此方法次数多于5次,就显示验证码 吧当前方法的name传进来,有效时间是5分 ...
随机推荐
- Linux find命令忽略目录的查找方法
在Linux操作系统中,find命令非常强大,在文件与目录的查找方面可谓无所不至其极,如果能结合xargs命令使得,更是强大无比. 以下来看看find命令忽略目录查找的用法吧. 例1,根据文件属性查找 ...
- xgboost 算法总结
xgboost有一篇博客写的很清楚,但是现在网址已经失效了,之前转载过,可以搜索XGBoost 与 Boosted Tree. 现在参照这篇,自己对它进行一个总结. xgboost是GBDT的后继算法 ...
- flutter upgrade之后出现Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from
错误信息 Initializing gradle... Resolving dependencies... Running Gradle task 'assembleDebug'... /Users/ ...
- SpringMVC request 得到文件路径
1.java中的路径 File directory = new File("abc"); // 对于getCanonicalPath()函数,“."就表示当前的文件夹,而 ...
- js数组、对象处理
js arry: var arry = []; js object: var obj = {}; obj定义属性: obj.filename=''; obj.id=''; 把 obj 添加到 arry ...
- WMS 162服务器空间满,清日志
/usr/local/tomcat-ibus/logs/usr/local/tomcat-ibus/bin/logs/usr/local/tomcat-api/bin/logs/usr/local/t ...
- CentOS7下Redis的安装与使用
一.安装过程 1.准备工作(安装gcc依赖) # yum install gcc-c++ 2.下载并解压源码包 # cd /usr/local # wget http://download.redis ...
- Spring MVC -- Spring Tool Suite和Maven(安装Tomcat、JDK)
Spring提供了自己的集成开发环境(IDE),称为Spring Tool Suite(STS),它可能是构建Spring应用程序的最佳IDE了.STS捆绑了Maven作为其默认依赖管理工具,因此不需 ...
- [转]解决 gem install 安装失败
链接地址:https://blog.csdn.net/weixin_42414461/article/details/85337465
- Javacript Remove Elements from Array
參考自: https://love2dev.com/blog/javascript-remove-from-array/ 1. Removing Elements from End of Array ...