Java 简单的登录验证码
1 验证码的作用
验证码是为了区分人与机器,如果没有验证码机制,web网站或者应用会遇到很多问题,具体如下:
① 网站容易被暴力登录攻破密码,可以制作一个自动程序不断的尝试登录,密码很容易被破解,系统容易瘫痪;
② 黑客可以创建自动程序不断的注册账户,不断的发帖,不断的刷票,消耗服务器资源,产生大量垃圾信息;
验证码分为两部分:图片与输入框
<html><br/>
<image src='images/logo1.jpg' /><hr/>
<head><br/><title>登录</title> <br/><h1> 欢迎登录</h1></head> <br/>
<body> <br/>
<form action='/LoginValid/LoginVerify' method='post' >
用户id:<input type='text' name='userid' value=''> <br/>
用户密码:<input type='password' name='password' value=''> <br/>
<br/>
验证码:<input type='text' name='inputCode' value='' /> <img src='/LoginValid/CreateCode2' /><br/>
<input type='submit' value='登录' /><br/>
</form>
</body> <br/>
</html>
CreateCode实时生成图片
private static final int IMG_W=82;
private static final int IMG_H=25;
private static final int NUM_CHS=5;
private static char[] chs = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890".toCharArray();
private static Random rand = new Random(); public 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"); //创建image对象
BufferedImage image = new BufferedImage(IMG_W, IMG_H, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics(); //验证码图片背景颜色
Color co = new Color(200,200,255);
g.setColor(co); g.fillRect(0, 0, IMG_W, IMG_H);
//保存验证码字符
StringBuilder sb = new StringBuilder();
int index=0;
for(int i=0; i<NUM_CHS; i++)
{
//获取随机一个下标
index = rand.nextInt(chs.length);
//给画笔随机一个颜色
g.setColor(new Color(rand.nextInt(88),rand.nextInt(210),rand.nextInt(150)));
//画出字符
g.drawString(chs[index]+"", 15*i+3, 18);
sb.append(chs[index]);
} //将验证码保存至session
request.getSession().setAttribute("checkCode", sb.toString());
ImageIO.write(image, "jpg", response.getOutputStream());
}
验证用户输入的验证码与session里保存的是否一致:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter(); HttpSession session = request.getSession();
String seCode = (String)session.getAttribute("checkCode");
String inputCode = (String)request.getParameter("inputCode");
if(seCode.equals(inputCode))
{
request.getRequestDispatcher("/Main").forward(request, response);
}
else
{
request.getRequestDispatcher("/Err").forward(request, response);
} }
Java 简单的登录验证码的更多相关文章
- Java Web实现登录验证码(Servlet+jsp)
1.生成验证码图片(Servlet) import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import j ...
- Java Web制作登录 验证码
具体操作如下: 新建一个servlet,代码如下:标记一个WebServlet, @WebServlet(urlPatterns = {"/checkCode"}) //验证码Se ...
- 【知了堂学习笔记】java web 简单的登录
最近皮皮潇在学习java web,刚接触了简单的东西,所以今天给大家带来一个简单的登录实现. 页面: 页面代码: <%@ page language="java" conte ...
- Java 简单登录MVC
构建一个简单的基于MVC模式的JavaWeb 零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是 ...
- Java结合SpringBoot拦截器实现简单的登录认证模块
Java结合SpringBoot拦截器实现简单的登录认证模块 之前在做项目时需要实现一个简单的登录认证的功能,就寻思着使用Spring Boot的拦截器来实现,在此记录一下我的整个实现过程,源码见文章 ...
- Java中SSM+Shiro系统登录验证码的实现方法
1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; im ...
- Java实现登录验证码
登录验证码 Servlet /* 从请求中获取数据,获取验证码的session的值转为String类型, 销毁,防止返回后验证码不刷新,重新验证成功 判断验证码是否相同(忽略大 ...
- Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题
日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...
- Java爬虫模拟登录——不给我毛概二的H某大学
你的账号访问太频繁,请一分钟之后再试! 从大一开始 就用脚本在刷课 在专业课踢的只剩下一门C#的情况下 活活刷到一周的课 大二开始教务系统多了一个非常**的操作 退课池 and 访问频繁缓冲 难道,我 ...
随机推荐
- nginx tcp负载均衡 (Module ngx_stream_upstream_module)
Example ConfigurationDirectives upstream server zone state hash least_conn ...
- 用js显示系统当前日期
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 本地项目上传到CODING
1.在Coding上添加项目 1).新建项目 README:一般项目中都会添加一个README文件对项目进行概述,以便一目了然地知道这个项目是做什么用的,如何使用等信息.README文件采用markd ...
- cents上运行wget报错:unable to resolve host address
wget命令报错.无法解析域名"www.keepalived.rog" [vagrant@RS1 download]$ wget http://www.keepalived.org ...
- jvm运行时内存模式
jvm内存模型 内存模型粗略划分为:堆和栈 详细划分为:堆,虚拟机栈,方法区,本地方法区,程序计数器 程序计数器: 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程 ...
- 盘点 Oracle 11g 中新特性带来的10大性能影响
Oracle的任何一个新版本,总是会带来大量引人瞩目的新特性,但是往往在这些新特性引入之初,首先引起的是一些麻烦,因为对于新技术的不了解.因为对于旧环境的不适应,从Oracle产品到技术服务运维,总是 ...
- anaconda新建虚拟环境安装各个依赖包
深度学习的代码,好多都需要安装一些安装包,在服务器上安装需要权限就很麻烦.看到网上有说把这些安装包一个个下载下来上传到服务器再安装,心累,想想工程量就很大~~~ 这时候就可以在anaconda中新建虚 ...
- 环境部署(四):Linux下查看JDK安装路径
在安装好Git.JDK和jenkins之后,就需要在jenkins中进行对应的设置,比如在全局工具配置模块,需要写入JDK的安装路径. 这篇博客,介绍几种常见的在Linux中查看JDK路径的方法... ...
- ESP8266开发综合篇第十四节(LUA)-8266作为TCP服务器,Android客户端连接,显示温湿度,控制继电器
前几节先略过,我先补充上大部分人迫切的需求 编写Android TCP客户端 用Android Studio 先做一下界面 然后放一个输入对话框,因为没有显示出来这个控件.所以就手写 剩下的自己研究 ...
- 面试笔记--HashMap扩容机制
转载请注明出处 http://www.cnblogs.com/yanzige/p/8392142.html 扩容必须满足两个条件: 1. 存放新值的时候当前已有元素的个数必须大于等于阈值 2. 存放新 ...