SSM 实现登录验证码(附源码)

本文介绍了如何在SSM(Spring、SpringMVC、MyBatis)环境下实现登录验证码的功能,包括创建RandomValidateCode工具类,编写Controller接口,以及在JSP页面中展示验证码。并提供了Kaptcha框架作为简单实现验证码的备选方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果想用框架来实现验证码,可以看我的另外一篇博客:

Kaptcha 框架的使用很简单的。新手必备。

https://blog.youkuaiyun.com/weidong_y/article/details/81005658

一、效果图

二、实现代码

第一步:先建一个 RandomValidateCode.java 作为工具类。把下面的代码直接复制粘贴即可。

package com.utils;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class RandomValidateCode {

    public static final String RANDOMCODEKEY = "randomcode_key";//放到session中的key
    private Random random = new Random();
    private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUV
SSM(Spring+SpringMVC+MyBatis)登录验证码实现步骤如下: 1. 在登录页面上添加一个验证码输入框和一个验证码图片; 2. 随机生成一个验证码,并将其存储到 session 中; 3. 将验证码图片输出到页面上,并将验证码图片的 URL 存储到 session 中; 4. 用户输入验证码后,将其与 session 中的验证码进行比对; 5. 如果比对成功,则继续进行登录操作;否则,提示用户验证码错误。 下面是一个简单的示例代码: 验证码生成器: ```java public class VerifyCodeUtils { private static final String VERIFY_CODES = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; public static String generateVerifyCode(int verifySize) { StringBuilder sb = new StringBuilder(); Random random = new Random(); for (int i = 0; i < verifySize; i++) { sb.append(VERIFY_CODES.charAt(random.nextInt(VERIFY_CODES.length()))); } return sb.toString(); } public static BufferedImage generateImage(String verifyCode) { int width = 100; int height = 40; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); g.setColor(Color.BLACK); g.setFont(new Font("Arial", Font.BOLD, 20)); for (int i = 0; i < verifyCode.length(); i++) { g.drawString(String.valueOf(verifyCode.charAt(i)), 20 * i + 10, 25); } g.dispose(); return image; } } ``` 登录页面: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <form action="${pageContext.request.contextPath}/login" method="post"> <label>用户名:</label> <input type="text" name="username"><br> <label>密码:</label> <input type="password" name="password"><br> <label>验证码:</label> <input type="text" name="verifyCode"> <img src="${pageContext.request.contextPath}/verifyCode" onclick="this.src='${pageContext.request.contextPath}/verifyCode?time='+new Date().getTime()"><br> <input type="submit" value="登录"> </form> </body> </html> ``` 登录控制器: ```java @Controller public class LoginController { @RequestMapping("/login") public String login(String username, String password, String verifyCode, HttpSession session) { String realVerifyCode = (String) session.getAttribute("verifyCode"); if (!realVerifyCode.equalsIgnoreCase(verifyCode)) { return "redirect:/login"; } // 进行登录操作 return "redirect:/index"; } @RequestMapping("/verifyCode") public void verifyCode(HttpSession session, HttpServletResponse response) throws IOException { // 生成验证码 String verifyCode = VerifyCodeUtils.generateVerifyCode(4); session.setAttribute("verifyCode", verifyCode); // 输出验证码图片 BufferedImage image = VerifyCodeUtils.generateImage(verifyCode); response.setContentType("image/png"); OutputStream os = response.getOutputStream(); ImageIO.write(image, "png", os); os.flush(); os.close(); } } ```
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值