javaweb之验证码验证技术
今天学习了一个验证码校验技术,所以就写下了一些笔记,方便日后查看。首先创建web工程
1、然后在src目录下创建一个Servlet类,此类用来显示登录页面和错误信息提示
package com.LHB; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class Login
*/
@WebServlet("/Login")
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public Login() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter(); //返回一个界面 out.println("<h1>用户登录</h1>");
out.println("<form action='/CheckCode/LoginCl' method='get'>");
out.println("用户名:<input type='text' name='id'><br>");
out.println("密码:<input type='password' name='password'><br>");
out.println("验证码:<input type='text' name='checkcode'><img src='/CheckCode/CreateCode'><br>");//加载验证码图片是只要将产生验证码的对应类路径指定到img标签中即可
out.println("<input type='submit' value='登录'><br>"); out.println("</form>");
String err=(String) request.getAttribute("err");
if(err!=null) {
out.println(err);
}
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }
2、继续创建一个Servlet,用来显示校验成功后的页面。
package com.LHB; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class LoginCl
*/
@WebServlet("/LoginCl")
public class LoginCl extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public LoginCl() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter(); //获取用户的id/password/输入验证码
String id = request.getParameter("id");
String passwd = request.getParameter("password");
String checkCode = request.getParameter("checkcode");
//取出session中验证码
String checkcode2 = (String) request.getSession().getAttribute("checkcode"); //1.先验证码
if(checkCode.equals(checkcode2)) {
//验证码ok
request.getRequestDispatcher("/OK").forward(request, response);
//到数据库去验证
}else {
request.setAttribute("err", "验证码错误");
request.getRequestDispatcher("/Login").forward(request, response);
} } /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }
3、最后创建验证码产生的Servlet,用来产生随机数校验码图片,并将该验证码图片返回到客户端。此类比较关键。
package com.LHB; import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random; 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; /**
* Servlet implementation class CreateCode
*/
@WebServlet("/CreateCode")
public class CreateCode extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public CreateCode() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //禁止浏览器缓冲随机图片
response.setDateHeader("Expires", -1);//防止启动浏览器时取先前缓冲的数据
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache"); //通知客户机以图片方式打开发送过去的数据
response.setHeader("Content-Type", "image/jpeg"); //在内存中创建一副图片
BufferedImage image = new BufferedImage(80, 30, BufferedImage.TYPE_INT_BGR); //想图片上写数据
Graphics graphics = image.getGraphics(); //设置背景色
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, 80, 30); //设置写入数据的颜色和字体
graphics.setColor(Color.BLACK);
graphics.setFont(new Font(null, Font.BOLD, 20)); //像图片上写数据
String num = makeNum(); //把随机生成的数值,保存到session中
request.getSession().setAttribute("checkcode", num);
graphics.drawString(num, 0, 20); //把写好数据的图片输出给浏览器
ImageIO.write(image, "jpg", response.getOutputStream()); } /**
* 功能:随机生成7位数字
* @return
*/
private String makeNum() {
Random random = new Random();
//9999999可以生成7位数
String num = random.nextInt(9999999)+"";
StringBuffer stringBuffer = new StringBuffer();
//如果不够指定位数则补0
for(int i=0;i<7-num.length();i++) {
stringBuffer.append("0");
}
num = stringBuffer.toString() + num;
return num;
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }
4



javaweb之验证码验证技术的更多相关文章
- JavaWeb开发之普通图片验证码生成技术与算术表达式验证码生成技术
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134649.html 另:算术验证码生成的JSP.Servlet实现均已移植github:https:/ ...
- [技术博客] 用户验证码验证机制---redis缓存数据库的使用
目录 问题引入 初识redis 实际应用 作者:马振亚 问题引入 在这次的开发过程中,我们的需求中有一个是普通用户可以通过特定的机制申请成为社长.因为只有部分人才能验证成功,所以这个最开始想了两种思路 ...
- php课程 8-30 实现验证码验证的难点是什么
php课程 8-30 实现验证码验证的难点是什么 一.总结 一句话总结:session技术实现验证码传递. 1.生成验证码的那个网页(php文件)中的验证码怎么搁到别的网页中去? 直接在img的src ...
- PHP实现邮箱验证码验证功能
*文章来源:https://blog.egsec.cn/archives/623 (我的主站) *本文将主要说明:PHP实现邮箱验证码验证功能,通过注册或登录向用户发送身份确认验证码,并通过判断输入 ...
- uu云验证码识别平台,验证码,验证码识别,全自动验证码识别技术,优优云全自动打码,代答题系统,优优云远程打码平台,uu云打码
uu云验证码识别平台,验证码,验证码识别,全自动验证码识别技术,优优云全自动打码,代答题系统,优优云远程打码平台,uu云打码 优优云验证码识别答题平台介绍 优优云|UU云(中国公司)是全球唯一领先的智 ...
- 第16 天 JavaWEB过滤器和监听器技术
Day16 JavaWEB过滤器和监听器技术 复习: 1.大结果集分页mysql的实现,是使用那个关键字,从user表中取第一页的数据,长度为10,sql语句怎么写? 2.分页查询的起始位置(star ...
- 【ThinkPHP框架学习 】(1) --- thinkphp 3.2.3 验证码验证使用教程分享
框架版本:ThinkPHP框架 thinkphp 3.2.3 生成验证码 下面是最简单的方式生成验证码: $Verify = new \Think\Verify(); $Verify-> ...
- JFinal Web开发学习(六)验证码验证和注册细节
效果: 实现了注册界面的验证码验证.确认密码.密码md5加盐加密.C3P0插件数据库操作.读取外部配置文件. 1.在注册页面添加了确认密码输入框,修改了字段名称 <!DOCTYPE html&g ...
- 互联网自治域间IP源地址验证技术综述
一.文章信息 作者:贾溢豪,任罡,刘莹 单位:清华大学 来源:软件学报 时间:2017年 二.基于加密.签名及标记信息 2.1 技术原理 采用端到端验证的设计结构,其中以密钥协商最为常见.通信双方在事 ...
随机推荐
- linux下eclipse环境配置的坑
打开eclipse问题: Q:"could not start goclipse because java version is 0"S:./eclipce -vm /usr/li ...
- angular 上传图像的使用总结
AngularJS 的文件上传控件有两个:(1) angular-file-upload:https://github.com/nervgh/angular-file-upload(2) ng-fil ...
- Cocos 2d TestCPP 学习
Cocos 2d testcpp包含了大量的demo, 对于新手学习cocos引擎具有非常大的帮助.因为接下来的开发项目有可能会用到该引擎,所以希望可以利用自己的业余时间提前熟悉起来.该篇文章会记录自 ...
- ascii码值
ascii码值#0 空值 即null#8 退格键#13 回车键
- 转:JSP之include动态包含与静态包含
原文地址:http://www.cnblogs.com/ygj0930/p/6044676.html JSP中,include是一个经常用到的标签.当应用程序中所有的页面的某些部分(如标题.页脚和导航 ...
- 使用Python + Selenium打造浏览器爬虫
Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操 ...
- SQL row_number() over(partition by函数
1)row_number() over(partition by 列名1 order by 列名2 desc)的使用 表示根据 列名1 分组,然后在分组内部根据 列名2 排序,而此函数计算的值就表示每 ...
- 不看好运维竖井产品模式,优云打造融合化运维PaaS平台
2018年1月13号中国双态运维用户大会上,优云软件总裁刘东海接受了36Kr记者的专访,期间谈到了新时代下的企业运维模式,新兴技术和传统运维的融合以及优云未来的发展方向等问题.以下为访谈实录: 优云软 ...
- 20170915 shell
1.什么是Shell 一种电脑程序与文本文件,利用Shell 可以进行系统管理,文件操作等. 2.认识bash 这个Shell 由于管理整个计算机硬件的其实是操作系统的内核(kernel),用户一般都 ...
- http://lib.csdn.net/article/reactnative/40118
http://lib.csdn.net/article/reactnative/40118 ES6学习笔记(四)--数值与数组 作者:SirM2z 数值的扩展 Number.isFinite(), N ...