- RandomImage.java
- 保存src
- 获取到src,把src写进去,把数字追加到字符缓冲区,把字符缓冲区内容返回给调用者,在方法前加返回值
- 此方法有String返回值
- 返回值
- 调用setRandouNum()方法时,获取验证码内容
- 获取session验证码是什么放到session里
- LoginServlet.java
- 获取填写的验证码
- 与session里的值比较
- 判断验证码是否一致
- 设置字符集
- login,html
- 验证码看不清点击图片刷新
主页面:login.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="/bookCookie/LoginServlet" method="post">
用户名:<input type="text" name="username"><br/><br/>
密码:<input type="password" name="password"><br/><br/>
验证码<input type="text" name="checkcode"><br>
<img src="./RandomImage"><br/><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
新建servlet
RandomImage.java
package com.hbsi.session;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RandomImage extends HttpServlet {
public static final int WIDTH = 130;
public static final int HEIGHT = 30;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
setBackGrount(g);
setBorder(g);
setRandomLine(g);
// 5.调用setRandouNum()方法时,获取验证码内容
String checkcode = setRandomNum(g);
// 6.获取session验证码是什么放到session里
request.getSession().setAttribute("imgcode", checkcode);
response.setContentType("image/jpeg");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setIntHeader("Expires",-1);
ImageIO.write(image,"JPEG",response.getOutputStream());
}
//产生验证码
// 3.此方法有String返回值
private String setRandomNum(Graphics g) {
// TODO Auto-generated method stub
//g.setColor(Color.BLACK);
g.setFont(new Font("宋体",Font.BOLD,20));
Random random = new Random();
// 1.保存src
StringBuffer sb = new StringBuffer();
int x=10;
for(int i=0;i<4;i++){
//产生随机数
String str = String.valueOf(random.nextInt(10));
// 2.获取到src,把src写进去,把数字追加到字符缓冲区,把字符缓冲区内容返回给调用者,在方法前加返回值
sb.append(str);
g.setColor(new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)));
int degree = random.nextInt()%30;
((Graphics2D)g).rotate(degree*Math.PI/180, x, 20);
g.drawString(str, x, 20);
((Graphics2D)g).rotate(-degree*Math.PI/180, x, 20);
x +=30;
}
// 4.返回值
return sb.toString();
}
private void setRandomLine(Graphics g) {
// TODO Auto-generated method stub
g.setColor(Color.blue);
Random random = new Random();
for(int i=0;i<5;i++){
int x1 = random.nextInt(WIDTH);
int y1 = random.nextInt(HEIGHT);
int x2 = random.nextInt(WIDTH);
int y2 = random.nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
private void setBorder(Graphics g) {
// TODO Auto-generated method stub
g.setColor(Color.BLUE);
g.drawRect(1, 1, WIDTH-2, HEIGHT-2);
}
private void setBackGrount(Graphics g) {
// TODO Auto-generated method stub
g.setColor(Color.PINK);
g.fillRect(0, 0, WIDTH, HEIGHT);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
新建LoginServlet
package com.hbsi.session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.hbsi.dao.UserDao;
import com.hbsi.dao.UserDaoImpl;
import com.hbsi.domian.User;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 10.设置字符集
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
// 7.获取填写的验证码
String checkcode = request.getParameter("checkcode");
// 8.与session里的值比较
String imgcode = (String) request.getSession().getAttribute("imgcode");
// 9.判断验证码是否一致
if(checkcode!=null && imgcode!=null && checkcode.equals(imgcode)){
//处理登陆请求
UserDao ud = new UserDaoImpl();
User user = ud.find(username, password);
if(user!=null){
request.getSession().setAttribute("user",user);
response.sendRedirect("/bookCookie/IndexServlet");
}
out.print("用户名密码错");
}else{
out.print("验证码错误!!!");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
验证码看不清点击图片刷新
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript">
function change(img){
img.src = img.src +"?"+ new Date().getTime();
}
</script>
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<form action="/bookCookie/LoginServlet" method="post">
用户名:<input type="text" name="username"><br/><br/>
密码:<input type="password" name="password"><br/><br/>
验证码<input type="text" name="checkcode"><br>
<img src="./RandomImage" onclick="change(this)"><br/><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
点击粉色图片后:
分享到:
相关推荐
C#_图形验证码(字母数字)
项目封装了比较通用的**校验、训练、验证、识别、API模块**,极大的减少了识别字符型验证码花费的时间和精力 1.1 关于验证码识别验证码识别大多是爬虫会遇到的问题,也可以作为图像识别的入门案例。目前通常使用...
状态机,串口收发,以及奇偶校验。 even_parity.v奇偶校验; receive_byte.v字节接收; send_byte.v字节发送
本程序是对LDPC校验矩阵的编码matlab源程序,对研究ldpc的人应该会很有帮助的!
计算输入数据的crc校验码,以判断接收数据是否正确
51 奇偶校验 程序 用C51实现带奇偶校验的串行通信
给大家介绍的Java发送邮箱验证码、session校验功能,希望对大家有所帮助
AXURE手机验证码样式;校验验证码;获取验证码及验证输入码是否正确;AXUre校验码;可用于系统原型登录注册;
计算crc16校验,例如01 03 00 00 00 02校验和为C4 0B
一个人开发的BCC校验程序,可以对字符串进行计算得到校验码.如0400822F的校验码是A9
EXE文件的自身校验
生成校验矩阵的几种方法:Davey1、Davey2、gallager_gen_LDPC、PEG
校验码计算大全,该程序是本人工作期间搜集了多种通讯校验码方式,为了测试方便集成为一个小测试工具,其中校验码计算部分可以直接复制出来用于你自己的程序。
采用异步方式传送数据,偶校验,一位结束位,传输的数据传输速率为9600bit/s。每个数据帧包含10Byte信息,1Byte作为帧起始标志,8Byte数据,1Byte的校验和。 //-----------------------函数声明,变量定义-
H06_20221022_V02_蓝牙名H06_校验码0000B28E_6E6B3E6E.upd
汇编写的CRC校验,把文件的CRC校验写到PE的WinVersin字段中
基于Matlab的仿真与实时控制_校验系统的设计.pdf
crc自动生成crc校验参数,CRC16位校验值的算法与实现
案例_Ajax_用户名异步校验 包括:源代码,sql语句,核心代码的笔记