jsp实现验证码登陆
login.jsp:
<%@ page language="java" import="java.util.*,com.cn.servlet.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用户登录</title>
<script>
function changeImg(){
var imgObj=document.getElementById("img");
imgObj.src="CheckCodeServlet?ran="+Math.random();
}
</script>
</head> <body>
<form action="LoginServlet" method="post">
账 号: <input type="text" name="account" ><br/>
密 码: <input type="password" name="password"><br/>
验证码:<input type="text" name="code" >
<img src="CheckCodeServlet" id="img"><a href="javascript:changeImg()">看不清换一张</a><br/>
<input type="submit" value="登录"><br/>
<span><%=request.getAttribute("Msg")%></span>
</form>
</body>
</html>
CheckCodeServlet:(生成验证码)
package com.cn.servlet; import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
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 CheckCodeServlet extends HttpServlet {
//产生随机的字体
private Font getFont(){
//创建random对象,用于生成随机数
Random random = new Random();
//创建字体数组,用于封装不同字体的Font对象
Font font[] = new Font[5];
font[0] = new Font("Ravie", Font.PLAIN, 24);
font[1] = new Font("Antique Olive Compact", Font.PLAIN, 24);
font[2] = new Font("Forte", Font.PLAIN, 24);
font[3] = new Font("Wide Latin", Font.PLAIN, 24);
font[4] = new Font("Gill Sans Ultra Bold", Font.PLAIN, 24);
return font[random.nextInt(5)];
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg");
OutputStream os = response.getOutputStream();
int width = 83, height = 30;
//建立指定宽、高和BufferedImage对象
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
Graphics g = image.getGraphics();//将画笔绘制于image上
Color c= g.getColor();//保存当前画笔的颜色
g.fillRect(0, 0, width, height);//填充矩形
char[] ch = "abcdefghigklmnopqrstuvwxyz2345678901".toCharArray();//随机产生字符串
int length = ch.length;//随机字符串长度
String sRand = "";//保存随机产生的字符串
Random random = new Random();
for (int i=0; i<4; i++){
g.setFont(getFont());//设置字体
String rand = new Character(ch[random.nextInt(length)]).toString();//随机生成0~9的数字
sRand += rand;
//设置随机颜色
g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));
g.drawString(rand, 20*i+6, 25);
}
//产生随机干扰点
for(int i=0; i<20; i++){
int x1 = random.nextInt(width);
int y1 = random.nextInt(height);
g.drawOval(x1, y1, 2, 2);
}
g.setColor(c);//重置画笔颜色
g.dispose();//释放此图形的上下文及使用的所有系统资源
request.getSession().setAttribute("safecode", sRand);//验证码记录到session
ImageIO.write(image, "JPEG", os);//输出图像到页面
} public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response);
}
}
LoginServlet:
package com.cn.servlet; import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; public class LoginServlet extends HttpServlet {
private String account = "Vito-Yan";
private String password = "12345678";
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String acc = request.getParameter("account");
String pwd = request.getParameter("password");
String code = request.getParameter("code");
if(acc.equals(account) && pwd.equals(password)){
HttpSession session = request.getSession();
String sessionCode = (String)session.getAttribute("safecode");
if(!(sessionCode.equals(code))){
request.setAttribute("Msg", "对不起验证码不正确");
request.getRequestDispatcher("login.jsp").forward(request, response);
}else{
session.setAttribute("account", account);
request.getRequestDispatcher("main.jsp").forward(request, response);
}
}else{
request.setAttribute("Msg", "对不起账号密码不正确");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
} }
jsp实现验证码登陆的更多相关文章
- 使用jsp生成验证码
在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试的方式. 此演示程序包括三个文件: 1.index.jsp:登录页面 2.image.jsp:生成 ...
- Jsp制作验证码
验证码 验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart&qu ...
- web自动化测试中绕开验证码登陆的方式
web自动化测试中登陆需验证码是很大的一个困扰.现推荐一种简单的避开验证码登陆的方式,先代码进入登录页,人工输入验证码登录后浏览器自动保存cookie,再在新的标签中登录. 具体代码如下: publi ...
- Web UI自动化测试中绕开验证码登陆方式浅谈
web自动化测试中让测试者感到困惑的是登陆验证码,每次都不一样.现在推荐一种绕开验证码登陆的方式,其实就是将web浏览器获取的登陆cookie加载到程序中就可以了,这样程序就会认为你已经登陆,就可以跳 ...
- JSP制作简单登陆
JSP制作简单登陆界面 运行环境 eclipse+tomcat+MySQL 不知道的可以参考Jsp运行环境--Tomcat 项目列表 这里我先把jsp文件先放在Web-INF外面访问 需要建立的几个文 ...
- 通过cookies跳过验证码登陆页面,直接访问网站的其它URL
我每次手动访问去NN网的一家酒店,就不需要登陆,一旦我用脚本打开就会让我登陆,而登陆页面又有验证码,不想识别验证码,所以就想:“通过cookies跳过验证码登陆页面,直接访问网站的其它URL” 转 ...
- Spring Cloud OAuth2(二) 扩展登陆方式:账户密码登陆、 手机验证码登陆、 二维码扫码登陆
概要 基于上文讲解的spring cloud 授权服务的搭建,本文扩展了spring security 的登陆方式,增加手机验证码登陆.二维码登陆. 主要实现方式为使用自定义filter. Authe ...
- JavaWeb-SpringSecurity使用短信验证码登陆
相关博文 JavaWeb-SpringBoot_一个类实现腾讯云SDK发送短信 传送门 系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 Java ...
- SpringSceurity(5)---短信验证码登陆功能
SpringSceurity(5)---短信验证码登陆功能 有关SpringSceurity系列之前有写文章 1.SpringSecurity(1)---认证+授权代码实现 2.SpringSecur ...
随机推荐
- python3 文件和流
流: 打开文件: open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, ...
- 【原创】POJ 3259 Wormholes(Bellman-Ford) && 简介Bellman-Ford算法
[原创] 题目大意 John有N个农场,一共有M条边,在农场上出现了W个虫洞(W是一条边),其中M是双向普通边,W是单向虫洞边.John穿行于农场之间每经过一条边(S到E)的时间为+T,每经过虫洞会时 ...
- 「NOI2016」优秀的拆分 解题报告
「NOI2016」优秀的拆分 这不是个SAM题,只是个LCP题目 95分的Hash很简单,枚举每个点为开头和末尾的AA串个数,然后乘一下之类的. 考虑怎么快速求"每个点为开头和末尾的AA串个 ...
- linux deb系 rpm系 配置永久IP
rpm: 1.IP a 查看网卡名 ens256 2.uuidgen ens256 生成UUID 3./etc/sysconfig/network-scripts add ifcfg-ens256 4 ...
- Picture POJ - 1177 (扫描线)
扫描线求周长,可以看成两条线,一条扫x轴,一条扫y轴,然后这两天线扫过去的 周长加起来,就是周长了 #include<map> #include<set> #include&l ...
- Crash 的文明世界
题目描述 给一棵树,求以每个点为根时下列式子的值. 题解 当k=1时这就是一个经典的换根dp问题. 所以这道题还是要用换根dp解决. 部分分做法: 考虑转移时是这样的一个形式(图是抄的). 用二项式定 ...
- 利用httpd配置虚拟目录创建下载站点
应用环境:通常放置一些文件来提供下载. 配置环境:centos7 //已经关闭Selinux和Firewall 需求假设:在网页输入主机IP并进入,会显示主机目录/home/share/的文件以提供下 ...
- Spring注解方式实现任务调度
原文:http://docs.spring.io/spring/docs/4.0.1.BUILD-SNAPSHOT/javadoc-api/ 注解类型:EnableScheduling @Target ...
- 【CSS 技能提升】 :before和:after的使用
前几天的晚上较全面的去看了下css的一些文档和资料,大部分的样式运用都没什么大问题了,只是有些许较陌生,但是也知道他们的存在和实现的是什么样式.今天主要想在这篇学习笔记中写的也不多,主要是针对:bef ...
- bzoj2007 NOI2010 海拔(对偶图)
80分(最小割)思路 先考虑如果没有题目中东南角为\(1\)那个限制的话会怎样. 那么只要让每个点的海拔都是\(0\)就行了.这样不论怎样走,最后的答案都是0. 然后再考虑那个东南角为\(1\)的限制 ...