点击“看不清换一张”
测试用例:
Index.jsp
<%@ page contentType="text/html; charset=utf-8" language="java"
import="java.util.*" errorPage=""%>
<HTML>
<head>
<title>测试</title>
</head>
<BODY id="body">
<form>
<img border=0 src="ImageMaskServlet" width="40" height="16" id = "imageMask">
<a href = "#" style = "font-size: 13px;margin-left: 5px;" onclick = "myReload()">看不清换一张</a>
</form>
<script type="text/javascript">
//用于刷新验证码
function myReload(){
document.getElementById("imageMask").src=document.getElementById("imageMask").src+"?nocache="+new Date().getTime();
}
</script>
</BODY>
</HTML>
ImageMaskServlet
package javaServlet;
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.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImageMaskServlet 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 {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
int width = 60, height = 20;
//创建图象
BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
//获取图形上下文
Graphics graphics = image.getGraphics();
//生成随机类
Random random = new Random();
//设定背景色
graphics.setColor(getRandColor(200, 250));
//验证码大小
graphics.fillRect(0, 0, width, height);
//设置字体
graphics.setFont(new Font("Times New Roman", Font.PLAIN, 18));
//graphics.setColor(getRandColor(160, 200));
//随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
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);
graphics.drawLine(x, y, x + xl, y + yl);
}
//取随机产生的认证码(4位数字)
String sRand = "";
for (int i = 0; i < 4; i++) {
//0~9
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
//设置数字颜色
graphics.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
//把随机产生的4位数画在图片上
graphics.drawString(rand, 13 * i + 6, 16);
}
//放在session中
request.getSession().setAttribute("imageMask", sRand);
//图象生效
graphics.dispose();
//输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
}
//生成随机颜色
public 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);
}
}
分享到:
相关推荐
然后在提交表单的按钮点击事件中,将输入的验证码与`session`中的验证码进行比较。 总结,使用JSP生成随机验证码涉及到JSP基本语法、内置对象、字符串操作、随机数生成、图像处理以及服务器端验证等多个知识点。这...
`:更新图片的源地址,通过添加当前时间和随机数,确保每次点击刷新按钮时都会加载新的验证码图片。 3. **刷新按钮绑定**:定义了一个按钮,当用户点击时会触发`refresh`函数执行,从而刷新验证码。 ```html ...
在JSP中,可以通过AJAX技术实现,每当用户刷新页面或点击刷新验证码按钮时,服务器会生成新的验证码并更新到页面上。 5. 声音验证码: 对于视觉障碍的用户,声音验证码是一种很好的替代方案。JSP可以配合Java的...
5. **刷新验证码**:当用户点击刷新按钮时,重新执行以上过程,生成新的验证码并替换旧的。 在实际应用中,为了提高用户体验,还可以添加一些附加功能,如: - **文本扭曲**:通过扭曲或旋转数字,增加机器识别的...
10. **安全注意事项**:尽管JSP验证码可以提供基础防护,但更高级的攻击手段(如OCR识别)可能仍能破解。因此,验证码只是多层安全措施中的一环,结合其他验证机制如IP限制、时间限制等,可以提高安全性。 以上就是...
- 在JSP页面中,我们可以创建一个`<img>`标签,其`src`属性指向一个处理验证码生成的Servlet或JSP页面(如`rand.jsp`)。 - `rand.jsp`接收到请求后,生成验证码字符串,并将其存入session,同时将其转换为图像...
- **刷新验证码**:当用户点击“刷新”按钮时,需要更新session中的验证码。 - **过期机制**:设置验证码的有效时间,过期后需要重新生成。 - **防止重放攻击**:每个验证码只能使用一次,使用后立即失效。 - **...
在实际应用中,还可以通过Ajax技术实现无刷新更换验证码,即用户点击“换一张”按钮时,无需刷新整个页面,仅更新验证码图像。这通常涉及到JavaScript、JQuery等前端技术,以及Servlet的异步处理。 总的来说,"jsp+...
- 使用JavaScript和Ajax技术,当用户点击“换一张”按钮时,发送异步请求到服务器获取新的验证码,无需刷新整个页面。 - 验证码的更新和验证都通过Ajax完成,提升用户体验。 6. **代码注释和操作方法**: - 为了...
在JSP中,我们可以创建一个包含验证码生成逻辑的Java类,然后在JSP页面上调用这个类来生成和显示验证码。Servlet则用于处理HTTP请求,例如当用户点击“刷新验证码”按钮时,Servlet会生成新的验证码并更新到Session...
以下是关于JSP验证码实现及相关知识点的详细解释: 1. **JSP(JavaServer Pages)**:JSP是Java平台上的动态网页技术,允许开发者将HTML、CSS、JavaScript与Java代码混合编写,服务器端执行Java代码并返回结果到...
在IT行业中,验证码是一种常见...总的来说,JSP验证码的实现涉及到了Java的图形处理、字符串生成、会话管理等多个方面。通过这样的验证码机制,开发者可以有效地保护Web应用免受恶意自动化攻击,确保用户交互的安全性。
总结来说,JSP验证码的实现涉及Java的图像处理、随机数生成以及session管理,而刷新功能则需要前后端的协同配合,利用AJAX实现无刷新刷新验证码。理解并掌握这些技术,对于构建安全的Web应用具有重要意义。
4. **用户提交登录信息**:当用户输入用户名、密码和验证码并点击“登录”按钮时,JSP页面将这些信息发送到服务器。 5. **服务器端验证**:服务器接收到请求后,检查输入的验证码是否与会话中的验证码匹配。如果...
在动态验证码场景中,当用户点击“刷新验证码”按钮时,AJAX请求会被触发,向服务器发送请求以获取新的验证码。服务器生成新的验证码后,通过JSON或其他数据格式返回,前端JavaScript代码接收到新验证码并更新图像。...
当用户点击刷新验证码按钮时,服务器端重新生成验证码并返回新的图像。 ### 4. 用户输入验证 用户在输入框中输入看到的验证码后,提交表单。服务器端接收到请求后,会检查session中存储的验证码是否与用户输入的...
- **刷新验证码**:在JSP页面中添加一个链接或按钮,用户可以点击刷新验证码。 - **无障碍性**:为视力障碍用户提供音频验证码选项。 - **安全性**:定期更换字体库和颜色组合,防止被破解。 通过以上步骤,你就...
本项目是一个基于Java实现的验证码生成及刷新功能,涉及到的技术主要包括JSP(JavaServer Pages)和Servlet。 首先,我们来看JSP。JSP是Java的一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写,使得...
1. **独立的验证码刷新按钮**:为验证码提供一个单独的刷新按钮,点击该按钮时仅更新验证码图像,而不触发表单重置。 2. **AJAX请求**:使用`JavaScript`的`XMLHttpRequest`或`fetch` API异步发送请求到`JSP`,请求...
8. **刷新验证码**:当用户点击“刷新”按钮时,重新执行上述步骤,生成新的验证码并更新图像。 在实际应用中,还可以考虑其他安全措施,例如限制用户尝试验证的次数,设置验证码过期时间,或者使用更复杂的验证码...