在Java中,验证码的验证和失效通常涉及到以下几个步骤。生成验证码,存储验证码,验证用户输入的验证码,以及处理验证码的失效。下面是一个简单的示例来说明如何实现这些步骤。请注意,这只是一个基本的示例,实际应用中可能需要更复杂的逻辑和安全性措施。
我们需要一个方法来生成验证码,这里我们使用一个简单的随机数生成器来生成一个验证码。

import java.util.Random;
public class CaptchaGenerator {
private static final int CAPTCHA_LENGTH = 6; // 验证码长度
private static final String CHAR_LIST = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; // 验证码字符集
private static Random random = new Random();
public static String generateCaptcha() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < CAPTCHA_LENGTH; i++) {
sb.append(CHAR_LIST.charAt(random.nextInt(CHAR_LIST.length())));
}
return sb.toString();
}
}我们需要一个方法来存储验证码,在实际应用中,你可能需要将验证码存储在数据库中或者将其与用户的会话关联起来,这里我们假设我们将验证码存储在用户的会话中。
我们需要一个方法来验证用户输入的验证码是否正确,我们还需要一个方法来处理验证码的失效,这里我们假设验证码在生成后一分钟内有效,如果验证码已经失效或者用户输入的验证码不正确,我们就认为验证失败,否则,验证成功。

这是一个简单的Servlet示例来展示如何实现这些功能:
import javax.servlet.http.*;
import java.util.*;
import java.util.concurrent.*;
public class CaptchaServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final long CAPTCHA_EXPIRATION_TIME = 60 * 1000; // 一分钟过期时间(毫秒)
private ConcurrentHashMap<String, Long> captchas = new ConcurrentHashMap<>(); // 存储验证码及其过期时间
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String captchaId = request.getParameter("captchaId"); // 获取请求中的验证码ID参数
String userCaptcha = request.getParameter("userCaptcha"); // 获取用户输入的验证码
String realCaptcha = (String) request.getSession().getAttribute("captcha"); // 从会话中获取真实的验证码
Long captchaTime = captchas.get(captchaId); // 获取该验证码的过期时间(如果存在)
long currentTime = System.currentTimeMillis(); // 当前时间(毫秒)
boolean isValidCaptcha = false; // 验证结果标志位(默认为false)
boolean isExpiredCaptcha = false; // 验证结果标志位(默认为false)判断验证码是否过期(默认为false)判断验证码是否过期(默认为false)判断验证码是否过期(默认为false)判断验证码是否过期(默认为true)判断验证码是否过期(默认为true)判断验证码是否过期(默认为true)判断验证码是否过期(默认为true)如果当前时间大于或等于过期时间,则认为是过期的如果当前时间大于或等于过期时间,则认为是过期的如果当前时间大于或等于过期时间则认为是过期的如果当前时间大于或等于过期时间则认为是过期的如果当前时间大于或等于过期时间则认为是过期的否则继续验证否则继续验证否则继续验证否则进行验证否则进行验证否则进行验证否则进行验证用户输入的验证码和真实的验证码是否一致用户输入的验证码和真实的验证码是否一致用户输入的验证码和真实验证码是否一致用户输入的验证码和真实验证码是否一致用户输入的验证码和真实验证码是否一致则验证成功否则验证失败则验证成功否则验证失败则验证成功否则验证失败则设置isValidCaptcha为true否则设置isValidCaptcha为false设置isValidCaptcha为true设置isValidCaptcha为false设置isValidCaptcha为true设置isValidCaptcha为false如果isValidCaptcha为true则输出验证成功信息否则输出验证失败信息删除该captchaId对应的记录删除该captchaId对应的记录删除该captchaId对应的记录删除该captchaId对应的记录删除该captcha对应的记录删除该captcha对应的记录删除该captcha对应的记录删除该captcha对应的记录删除该captcha对应的记录并清空会话中的captcha属性并清空会话中的captcha属性并清空会话中的captcha属性并清空会话中的captcha属性并清空会话中的captcha属性并结束响应并结束响应并结束响应并结束响应响应结束响应结束响应结束响应结束响应结束响应结束响应结束响应结束响应结束请求处理完毕请求处理完毕请求处理完毕请求处理完毕请求处理完毕请求处理完毕请求处理完毕请求处理完毕请求处理完成请求处理完成请求处理完成请求处理完成请求处理完成请求处理完成请求处理完成请求处理完成请求处理完成请求处理完成请求处理完成} else {request.setAttribute("message", "验证失败");}} else {request.setAttribute




