- 浏览: 3558144 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
很多网站注册或者登录是需要验证码的,这是为了防止机器人注册。本文是采用 servlet + html的方式,
展现一个demo,从登录到验证到跳转的整个过程,其他的代码细细品味,有些不懂,无需搞懂,
比如生成随机码的过程,但是有一点,随机码的图片的高度和宽度至少需要设置吧。
1.工程图片
----------------------------------------------
2.流程
登录到index.html中,有一个对话框,需要填写用户名,密码,验证码,填写完毕,登录,
首先验证码会到filter中去验证,当然了,也可以在loginservlet中验证(我这是为了想用下filter),
如果验证码错误,那么跳转到index.html中,如果正确,进入到LoginServlet中,再对用户名和密码
进行验证,如果正确的话,那么跳转到index.jsp页面,如果错误的话,只能是跳转到index.html中,
重写的验证。(验证码是放在session中的)
代码:
生成验证码图片的 YanZhengMaBean.java
只有知道生成了BufferedImage,一张图片,然后servlet把图片通过方法发射到html中去
你真心无需知道图片怎么产生,只要知道这个bean是生成验证码图片的,并且把验证码字符串放入
到rand的session中了,高和宽改改就行
package com.endual.bean; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.Random; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; public class YanZhengMaBean { public BufferedImage getBuffImg (HttpServletRequest request) { // 验证码图片的宽度。 int width = 70; // 验证码图片的高度。 int height = 30; BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); // 创建一个随机数生成器类。 Random random = new Random(); // 设定图像背景色(因为是做背景,所以偏淡) g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); // 创建字体,字体的大小应该根据图片的高度来定。 Font font = new Font("Times New Roman", Font.HANGING_BASELINE, 28); // 设置字体。 g.setFont(font); // 画边框。 g.setColor(Color.BLACK); g.drawRect(0, 0, width - 1, height - 1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到。 // g.setColor(Color.GRAY); g.setColor(getRandColor(160, 200)); for (int i = 0; i < 155; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x + xl, y + yl); } // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。 StringBuffer randomCode = new StringBuffer(); // 设置默认生成4个验证码 int length = 4; // 设置备选验证码:包括"a-z"和数字"0-9" String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; int size = base.length(); // 随机产生4位数字的验证码。 for (int i = 0; i < length; i++) { // 得到随机产生的验证码数字。 int start = random.nextInt(size); String strRand = base.substring(start, start + 1); // 用随机产生的颜色将验证码绘制到图像中。 // 生成随机颜色(因为是做前景,所以偏深) // g.setColor(getRandColor(1, 100)); // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110))); g.drawString(strRand, 15 * i + 6, 24); // 将产生的四个随机数组合在一起。 randomCode.append(strRand); } // 将四位数字的验证码保存到Session中。 HttpSession session = request.getSession(); session.setAttribute("rand", randomCode.toString()); // 图象生效 g.dispose(); // 禁止图像缓存。 return buffImg ; } 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); } }
把验证码的字符串放入到到名叫rand的session中了
2.发射验证码图片的servlet
package com.endual.servlets; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.endual.bean.YanZhengMaBean; public class YanZhengMaServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response) ; } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { YanZhengMaBean bean = new YanZhengMaBean() ; BufferedImage buffImg = bean.getBuffImg(request) ; response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); response.setContentType("image/jpeg"); // 将图像输出到Servlet输出流中。 ServletOutputStream sos = response.getOutputStream(); ImageIO.write(buffImg, "jpg", sos); sos.flush(); sos.close(); } }
这里要插话:
1.response.setHeader("Cache-Control", "no-cache");
2.ImageIO.write(buffImg, "jpg", sos);
你懂的,发射图片要用ImageIO,不是发射字符串或者json的方法了
3. Filter 过滤下验证码,貌似直接写在loginservlet中更好吧??
package com.endual.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; public class YanZhengMaFilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest requestHttp = (HttpServletRequest) servletRequest; String yazhengma = servletRequest.getParameter("yazhengma") ; HttpSession session = requestHttp.getSession(); String buf = (String)session.getAttribute("rand") ; if (buf==null) { //跳转到登录页面中去 RequestDispatcher requestDispatcher = servletRequest.getRequestDispatcher("/index.html"); requestDispatcher.forward(servletRequest, servletResponse); }else { if (buf.toLowerCase().equals(yazhengma.toLowerCase())) { //进入到页面中 //RequestDispatcher requestDispatcher = servletRequest.getRequestDispatcher("/index.jsp"); //requestDispatcher.forward(servletRequest, servletResponse); filterChain.doFilter(servletRequest, servletResponse); }else { //跳转到登录页面中去 RequestDispatcher requestDispatcher = servletRequest.getRequestDispatcher("/index.html"); requestDispatcher.forward(servletRequest, servletResponse); } } } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
过滤,验证下验证码
4.登录的servlet
LoginServlet.java
package com.endual.servlets; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username") + "" ; String password = request.getParameter("password") + ""; RequestDispatcher requestDispatcher = null ; if (username.equals("chenwei")) { //跳转到登录页面中去 requestDispatcher = request.getRequestDispatcher("/index.jsp"); }else { requestDispatcher = request.getRequestDispatcher("/index.html"); } requestDispatcher.forward(request, response); } }
5.注册的web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>session-timeout</filter-name> <filter-class>com.endual.filter.YanZhengMaFilter</filter-class> </filter> <filter-mapping> <filter-name>session-timeout</filter-name> <url-pattern>/LoginServlet.do</url-pattern> </filter-mapping> <servlet> <description> This is the description of my J2EE component </description> <display-name> This is the display name of my J2EE component </display-name> <servlet-name>YanZhengMaServlet</servlet-name> <servlet-class> com.endual.servlets.YanZhengMaServlet </servlet-class> </servlet> <servlet> <description> This is the description of my J2EE component </description> <display-name> This is the display name of my J2EE component </display-name> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.endual.servlets.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>YanZhengMaServlet</servlet-name> <url-pattern>/YanZhengMaServlet.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
6.登录的界面
最好么用到js,可以做个刷新验证码用的,但是我不写了,不会写,要google抄代码啊
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>index.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"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="expires" content="0" /> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <form action="LoginServlet.do" method="get"> username : <input type="text" name="username"/><br/> password :<input type="text" name="password" /><br/> yazhengma: <input type="text" name="yazhengma"><img src="YanZhengMaServlet.do"/> <br/> <input type="submit" value="subimt"/> </form> </body> </html>
登录界面看看
7.登录成功的index.jsp
<%@ page language="java" import="java.util.*" 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> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 登录成功 </body> </html>
这下完全OK了
http://download.csdn.net/download/endual/4484949
完全工程下载,2分,付钱,谢谢
发表评论
-
snmp
2020-04-13 11:07 429https://www.iteye.com/blog/zhan ... -
snmp
2020-04-10 21:33 566https://blog.csdn.net/qq_333141 ... -
服务器监控软件
2019-12-31 11:07 513[ERROR] org.hyperic.sigar.Sigar ... -
多数据源
2019-12-23 22:09 455https://gitee.com/baomidou/dyna ... -
mybatis多数据源
2019-12-23 18:09 449https://blog.csdn.net/qq_288042 ... -
springboot ueditor
2019-12-17 18:26 381https://blog.csdn.net/u01216982 ... -
java支持多数据源
2019-12-13 15:59 456spxcms是否支持多数据源 ... -
java日志
2019-12-10 12:01 297https://blog.csdn.net/peng_wei_ ... -
spring 多数据源
2019-12-06 09:55 432https://www.jb51.net/article/10 ... -
idea
2019-12-04 17:13 411https://blog.csdn.net/dengachao ... -
手机大屏
2019-11-30 16:02 350http://demo.demohuo.top/modals/ ... -
quarz配置
2019-11-08 11:48 462https://blog.csdn.net/BryantLmm ... -
mysql同步
2019-11-06 12:20 352https://blog.csdn.net/baidu_418 ... -
nginx配置多个服务
2019-11-04 20:35 775https://blog.csdn.net/everljs/a ... -
h5 加壳
2019-11-04 16:05 630https://jingyan.baidu.com/artic ... -
jeui 前端框架
2019-10-22 14:30 1208http://www.jemui.com/demo/ http ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ htt ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/
相关推荐
JAVA JSP版验证码 JAVA JSP版验证码 JAVA JSP版验证码 JAVA JSP版验证码
Java JSP验证码是一种常见的网页安全机制,用于防止自动化的机器人或者恶意用户进行非法操作,比如批量注册、恶意登录等。这个源码例子是关于如何在Java JSP环境中实现验证码功能的教程。 首先,验证码的核心在于...
在`jsp验证码登录`这个主题中,我们将探讨如何在用户登录过程中引入验证码机制,增强系统的安全性。 首先,当用户尝试登录时,我们需要检查输入的用户名和密码。在JSP中,这可以通过`request.getParameter()`方法...
**JSP验证码登录程序详解** 验证码(CAPTCHA)是一种用于防止自动机器人或恶意脚本进行非法操作的安全机制,常用于用户登录、注册等场景。在JSP(Java Server Pages)中,结合Servlet实现验证码功能,可以有效提升...
本教程将详细讲解如何在Java JSP环境下制作一个简单的登录验证码。 首先,我们需要理解验证码的基本原理。验证码通常由随机生成的一串字符(包括字母、数字)组成,并通过图像展示出来,用户需要在输入框中正确输入...
一款用java+jsp编写的验证码插件,可以在web项目中直接应用。
实验五主要涵盖了AJAX技术的运用以及JSP验证码的开发,这两个知识点对于前端开发者来说是至关重要的。AJAX,即Asynchronous JavaScript and XML(异步JavaScript和XML),它允许网页在不重新加载整个页面的情况下与...
在Java Web开发中,我们可以使用Servlet和JSP来实现一个简单的图形验证码。以下将详细介绍如何利用这两个技术进行验证码的实现。 首先,理解验证码的基本原理:验证码是一种通过图像显示随机字符或数字的方式,用户...
一个登录验证生成验证码用struts 后台生成验证码在jsp页面输出生成图片
- **使用`<jsp:include>`标签**:将生成验证码的Java代码包含到JSP页面中。 - **`<img>`标签**:生成的验证码图片以HTTP响应的方式返回,通过`<img>`标签显示在网页上。 - **session管理**:使用`session....
java生成验证码源码包括彩色验证码 包括jsp生成验证码和彩色验证码
Java生成彩色验证码是一种常见的安全措施,用于防止自动化脚本或恶意机器人进行非法操作,例如注册、登录等。在Web开发中,JSP(JavaServer Pages)可以用来创建动态的网页内容,包括验证码图像。以下是对标题和描述...
### jsp验证码刷新功能 在Web开发中,验证码(CAPTCHA)被广泛应用于表单提交、用户登录等场景,以防止自动化的恶意攻击或垃圾信息的提交。而在JSP技术中实现验证码的刷新功能,不仅可以提升用户体验,还能进一步...
【JSP验证码(Servlet)详解】 验证码是一种常用的安全机制,用于防止自动化的恶意程序,如机器人,进行非法操作。在Web开发中,JSP(JavaServer Pages)与Servlet结合使用可以实现动态生成并验证验证码的功能。这...
采用jsp 生成验证码,我自己使用过的。使用方法: <img src="./../function/imagejsp.jsp" style="float: left">
【标题】"jspupload.rar_OCR_java ocr_jsp_jsp 验证码_验证码 识别" 提供了一个基于JSP和Servlet实现的OCR(Optical Character Recognition,光学字符识别)系统,主要用于处理验证码的识别。这个系统允许用户通过...
### jsp用户登录验证码知识点详解 #### 一、概述 在Web应用开发中,为了防止自动化工具或恶意脚本对登录系统的频繁尝试,通常会在登录界面加入验证码功能。验证码(CAPTCHA)是一种用来区分人与计算机的技术手段。...
在Java开发中,实现验证码功能是常见的需求,尤其在登录系统中。下面将详细探讨标题和描述中提到的3个Java登录验证码的例子。 首先,`web08.rar`可能包含了一个基于Web的登录验证码示例。Web验证码通常由服务器生成...
这个JSP验证码生成器示例展示了如何使用JSP和Java图形处理库来创建动态的数字验证码。通过设置页面属性、控制页面缓存、生成随机颜色和线条、管理HTTP会话等技术手段,有效地提高了验证码的安全性和用户体验。这种...
java生成验证码代码 主要:一个生成验证码的servlet,一个jsp页面,另外还需要配置下web.xml即可