图形验证码的生成

本文介绍了一种基于Java的Web应用中验证码的生成与刷新机制。通过页面元素与后端控制器交互,确保每次请求都能获得新的验证码图片。利用前端JavaScript实现了点击更换验证码的功能,并详细展示了如何设置HTTP响应头以避免浏览器缓存。

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

1.页面添加

1
2
3
4
5
6
7
8
9
10
  <script type="text/javascript">
  // 更换验证码
  $captchaImage.click( function() {
     $captchaImage.attr("src""common/captcha.jhtml?captchaId=${captchaId}&timestamp=" new Date().getTime());
  });   
  <script>
   
          
 <input type="text" id="captcha" name="captcha"  maxlength="4" autocomplete="off" style="width:150px;"/>
 <img id="captchaImage" class="captchaImage" src="common/captcha.jhtml?captchaId=${captchaId}" title="点击更换验证码" />


2.controller添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Controller("adminCommonController")
@RequestMapping("/admin/common")
public class CommonController {   
    /**
     * 验证码
     */
    @RequestMapping(value = "/captcha", method = RequestMethod.GET)
    public void captcha(String captchaId, HttpServletRequest request, HttpServletResponse response) throws IOException {
        if (StringUtils.isEmpty(captchaId)) {
            captchaId = request.getSession().getId();
        }
        String pragma = new StringBuilder().append("yB").append("-").append("der").append("ewoP").reverse().toString();
        String value = new StringBuilder().append("ten").append(".").append("xxp").append("ohs").reverse().toString();
        response.addHeader(pragma, value);
        response.setHeader("Pragma""no-cache");
        response.setHeader("Cache-Control""no-cache");
        response.setHeader("Cache-Control""no-store");
        response.setDateHeader("Expires"0);
        response.setContentType("image/jpeg");
 
        OutputStream outputStream = response.getOutputStream();
        BufferedImage bufferedImage = captchaService.buildImage(captchaId);
        ImageIO.write(bufferedImage, "jpg", outputStream);
        outputStream.flush();
    }
}

3.启动运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值