java验证码的实现原理_web技术开发:网站的验证码的验证原理是什么?怎么实现的?...

news/2024/5/17 6:44:36/文章来源:https://blog.csdn.net/weixin_35847422/article/details/114311838

135511856_1_20180611055022722

src链接到生成验证码图片的servlet

135511856_2_20180611055022800

应用于数据回显

CheckImgServletpackage com.huanfeng.cn;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;/*** 验证码生成程序****/public class CheckImgServlet extends HttpServlet {// 集合中保存所有成语private Listwords = new ArrayList();@Overridepublic void init() throws ServletException {// 初始化阶段,读取new_words.txt// web工程中读取 文件,必须使用绝对磁盘路径String path = getServletContext().getRealPath('/WEB-INF/new_words.txt');try {BufferedReader reader = new BufferedReader(new FileReader(path));String line;while ((line = reader.readLine()) != null) {words.add(line);}reader.close();} catch (IOException e) {e.printStackTrace();}}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 禁止缓存// response.setHeader('Cache-Control', 'no-cache');// response.setHeader('Pragma', 'no-cache');// response.setDateHeader('Expires', -1);int width = 120;int height = 30;// 步骤一 绘制一张内存中图片BufferedImage bufferedImage = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 步骤二 图片绘制背景颜色 ---通过绘图对象Graphics graphics = bufferedImage.getGraphics();// 得到画图对象 --- 画笔// 绘制任何图形之前 都必须指定一个颜色graphics.setColor(getRandColor(200, 250));graphics.fillRect(0, 0, width, height);// 步骤三 绘制边框graphics.setColor(Color.WHITE);graphics.drawRect(0, 0, width - 1, height - 1);// 步骤四 四个随机数字Graphics2D graphics2d = (Graphics2D) graphics;// 设置输出字体graphics2d.setFont(new Font('宋体', Font.BOLD, 18));Random random = new Random();// 生成随机数int index = random.nextInt(words.size());String word = words.get(index);// 获得成语// 定义x坐标int x = 10;for (int i = 0; i < word.length();="" i++)="" {//="" 随机颜色graphics2d.setcolor(new="" color(20="" +="" random.nextint(110),="" 20="" +="" random.nextint(110),="" 20="" +="" random.nextint(110)));//="" 旋转="" -30="" ---="" 30度int="" jiaodu="random.nextInt(60)" -="" 30;//="" 换算弧度double="" theta="jiaodu" *="" math.pi="" 180;//="" 获得字母数字char="" c="word.charAt(i);//" 将c="" 输出到图片graphics2d.rotate(theta,="" x,="" 20);graphics2d.drawstring(string.valueof(c),="" x,="" 20);graphics2d.rotate(-theta,="" x,="" 20);x="" +="30;}//" 将验证码内容保存sessionrequest.getsession().setattribute('checkcode_session',="" word);//="" 步骤五="" 绘制干扰线graphics.setcolor(getrandcolor(160,="" 200));int="" x1;int="" x2;int="" y1;int="" y2;for="" (int="" i="0;" i="">< 30;="" i++)="" {x1="random.nextInt(width);x2" =="" random.nextint(12);y1="random.nextInt(height);y2" =="" random.nextint(12);graphics.drawline(x1,="" y1,="" x1="" +="" x2,="" x2="" +="" y2);}//="" 将上面图片输出到浏览器="" imageiographics.dispose();//="" 释放资源//将图片写到response.getoutputstream()中imageio.write(bufferedimage,="" 'jpg',="" response.getoutputstream());}public="" void="" dopost(httpservletrequest="" request,="" httpservletresponse="" response)throws="" servletexception,="" ioexception="" {doget(request,="" response);}/***="" 取其某一范围的color**="" @param="" fc*="" int="" 范围参数1*="" @param="" bc*="" int="" 范围参数2*="" @return="" color*/private="" color="" getrandcolor(int="" fc,="" int="" bc)="" {//="" 取其随机颜色random="" random="new" random();if="" (fc=""> 255) {fc = 255;}if (bc > 255) {bc = 255;}int r = fc + random.nextInt(bc - fc);int g = fc + random.nextInt(bc - fc);int b = fc + random.nextInt(bc - fc);return new Color(r, g, b);}}

135511856_3_20180611055022879

保存验证码到session

login.javapackage com.huanfeng.cn;import java.io.IOException;import java.sql.SQLException;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;public class login extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding('utf-8');String checkcode=request.getParameter('checkcode');HttpSession session = request.getSession();String checkcode_session=(String) session.getAttribute('checkcode_session');if(!checkcode_session.equals(checkcode)) {request.setAttribute('loginInfo', '验证码错误');request.getRequestDispatcher('login.jsp').forward(request, response);return;}String username = request.getParameter('username');String password =request.getParameter('password');User user=login(username,password);//login是去数据库查询数据,查询到返回Userif(user!=null) {//如果user存在则重定向到index.jspresponse.sendRedirect('/index.jsp');}else {//如果user没有,则表示没有查到request.setAttribute('loginInfo','密码错误');//向request域中写入数据,让login.jsp获取到request.getRequestDispatcher('/login.jsp').forward(request,response);//用转发,因为只有转发才能让jsp获取到login。info数据}}private User login(String username, String password) {QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());String sql='select * from user where username=? and password=?';try {User user=qr.query(sql, new BeanHandler(User.class),username,password);return user;} catch (SQLException e) {// TODO Auto-generated catch blockthrow new RuntimeException();}}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

135511856_4_20180611055022988

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_810529.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建立php的网站配置文件,网站的搭建流程,lnmp环境网站目录以及配置文件,安全等介绍!...

上节我们教了大家linux系统php环境的安装&#xff0c;这里我简单的教大家怎么配置安全&#xff0c;网站的根目录在哪&#xff0c;怎么样才能让一个网站运行起来。一个环境已经安装好了&#xff0c;点击ftp按钮进入ftp管理ftp管理界面可以直观的看到文件和目录等。首先是数据库的…

去哪儿网代理网站机票价格采集方案

2019独角兽企业重金招聘Python工程师标准>>> 原文作者&#xff1a;西安鲲之鹏 原文链接&#xff1a;http://http://www.site-digger.com/html/articles/20120509/33.html 去哪儿网的代理网站有自己独立的机票搜索接口&#xff0c;例如http://xyx.trade.qunar.com/si…

建设优质手机网站必读

在2013年底百度曾经发布了一份《2014中国网站运营发展趋势报告》&#xff0c;里面详细分析了目前中文网站的发展趋势&#xff0c;其中值得我们注意的是&#xff0c;报告中首次将PC端网站与移动端网站分开说明&#xff0c;另外一个可喜的发现是&#xff0c;目前在所有的网站中&a…

7个最好的文件存储网站

最近&#xff0c;文件越来越多&#xff0c;因为在不同的地方轮换上网&#xff0c;地方的不确定性迫使我去寻找一些高性能且免费的文件存储站点。或者&#xff0c;你目前有一些集体照片&#xff0c;需要传送给同学以及朋友&#xff0c;但是邮箱的附件的限制性让人霎时头痛。现在…

这10件事情,你做网站之前都有考虑吗?

2019独角兽企业重金招聘Python工程师标准>>> 1.命名尽量统一。 命名有很多地方&#xff0c;比如页面该如何统一命名&#xff0c;要是用wordpress建站&#xff0c;命名就该遵循wordpress的文件命名规范&#xff0c;比如文章页single.php,分类页category.php,搜索页se…

GCOGE技术内幕-Gcoge酷鸽传媒官方网站 Gcoge.com-酷哥一下,问题搞定!

Gcoge酷鸽传媒官方网站 Gcoge.com-酷哥一下,问题搞定!- 酷哥引擎新媒体 酷哥搜索珀利引擎-全球唯一全新概念珀利引擎新媒体--聚合优化创新 新思维 心服务~一个域名&#xff0c;通行天下!全球最大聚合门户!全球卓著搜索专家! 国内外著名搜索引擎聚合门户~我们的宗旨是为人民服务…

配置Nginx网站https访问、http共存访问、http强制跳转到https

最近公司一客户要求服务器与客户端之间传输内容是加密的&#xff0c;通过https协议访问&#xff0c;于是使用OpenSSL生成证书&#xff0c;默认情况下ssl模块并未被安装&#xff0c;如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数&#xff0c;需要确保机器…

成都PC网站建设需要考虑哪些费用呢

亿合科技PC建设小编分享下&#xff1a;成都PC网站建设需要考虑哪些费用呢&#xff1f;随互联网的发展&#xff0c;越来越多人想建设自己网站&#xff0c;站长最关心的问题之一就是网站建设需要多少钱。每个网站建设的费用都是不一样的&#xff0c;但是都需要涵盖几个方面的费用…

Linux系统的Web网站服务

实验要求&#xff1a;1.编译安装httpd服务器2.构建基于域名的虚拟web主机3.部署AWStats分析系统4.实现httpd服务的访问控制1.编译安装httpd服务器使用tar命令解包配置、编译、安装命令&#xff1a;./configure配置选项&#xff1a;--prefix&#xff1a;指定httpd服务程序的安装…

python搭建个人网站_Django快速搭建个人网站应用,源码开源

Django入门与实践应用&#xff0c;Python制作个人博客网站。Django是Python的高级Web框架&#xff0c;功能非常强大&#xff0c;但是你也不要被它给吓到了&#xff0c;其实Django搭建Web应用也非常简单&#xff0c;下面让小编以学习及分享的态度给大家讲一个Django入门的web应用…

现实世界的Windows Azure:专访PrivacyCentral网站创始人、CEO Zoiner Tejada

作为现实世界Windows Azure博客系列中的一部分&#xff0c;我联系了PrivacyCentral网站创始人、CEO Zoiner Tejada&#xff0c;来探寻该公司是如何利用Windows Azure平台及Ruby语言来搭建其强大的在线隐私服务。点击这里来了解PrivacyCentral的成功案例。下面我们来看看Tejada先…

多语言网站(如何实现网站的多语言版本?)

近日&#xff0c;公司要做一个多语言的网站&#xff0c;今天在网上收集资料&#xff0c;下面是个人觉得很不错的文章&#xff0c;有兴趣的朋友可以参考下&#xff1a; 多语言网站&#xff0c;顾名思义就是能够以多种语言&#xff08;而不是单种语言&#xff09;为用户提供信息服…

2核8g服务器可以做什么网站,2核8g云服务器可以干什么

2核8g云服务器可以干什么 内容精选换一换您可以在几分钟之内快速获得基于公有云平台的弹性云服务器设施&#xff0c;并且这些设施是弹性的&#xff0c;可以根据需求伸缩。该任务指导用户如何创建支持IB网卡的弹性云服务器&#xff0c;包括管理控制台方式和基于HTTPS请求的API(A…

张百川:“知道”网站安全体检初体验

昨天游侠写过一篇文章 [关于几个免费在线挂马检测网站] &#xff0c;说到了北京知道创宇公司的“知道网站安全体检中心”&#xff0c;他们的工作人员很及时的给我发了个内测账号&#xff0c;这里大体说下。当然网址是 http://www.scanv.com 大家可以去申请内测账号。流程基本是…

扫描网站后门脚本(awd可用)

在awd线下赛的时候&#xff0c;可以用这个脚本来检测有没有一句话木马 脚本如下&#xff1a; <!DOCTYPE html> <html> <head><meta charsetgb2312><title>PHP web shell scan</title> </head> <body></body><?php…

asp.net基础网站(我的第一个网站)(现代软件开发技术)

我们选择的软件是vs2019&#xff0c;因为教材过时等等会有很多地方不同&#xff0c;导致浪费了很多宝贵时间&#xff0c;写下这份教程供大家学习。 首先我们随便建个项目&#xff0c;打开vs2019的编程页面&#xff0c;选择工具-获取工具和功能 在这里我们选择修改 选择左上…

java使用HttpURLConnection检索网站时403错误处理方式

java使用HttpURLConnection检索网站时403错误处理方式: 我们通过代码方式访问网站时会报错&#xff1a; 此种情况分2中类型&#xff0c; 1.需要登录才可以访问&#xff1b; 2.需要设置User-Agent来欺骗服务器。 [html] view plaincopyprint? connection.setRequestProperty(&q…

常用网站

常用网站 证书管理 苹果开源代码 http://www.opensource.apple.com/source/ iOS 开发者中心 https://developer.apple.com/devcenter/ios/index.action 苹果申诉——Contact the App Review Team&#xff0d;&#xff0d;https:/…

前端demo工具网站

最近准备好好写博客了&#xff0c;写一系列前端的博客&#xff0c;总结下最近所学。 前端的东西总体来说是比较肤浅的&#xff0c;只是多而繁杂&#xff0c;如果后端的理论能勉强称得上是科学&#xff0c;前端只能说是技术&#xff0c;技巧&#xff0c;没有多少深层次的思维。这…

新手网站渗透思路

一、借助工具 AWVS扫描验证&#xff0c;除了验证还能帮我们学习漏洞。 Sql语句泄露 192.168.3.107/pentest/cms/beecms/article/article.php?id1" Id参数处存在sql语句泄露 Page也是存在sql语句泄露 192.168.3.107/pentest/cms/beecms/article/article.php?id4&…