使用redis保存验证码

前情提要:

因为公司对软件进行安全扫描,发现安全漏洞。需要将现有app软件的登录、注册功能添加图形验证码功能。验证码数据的生成以及校验需要在后台进行。

可参考后台管理系统的登录功能(如下图)。但是研究代码发现该功能的校验是在前台进行的,并且数据是后台生成后直接保存在页面隐藏框中。点击“登录”时进行校验。

后台代码如下:

package com.cpic.caf.hsp.web.controller.verifyCode;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dcits.common.util.VerifyCodeImg;
@RequestMapping("/ui/verifyCode")
@Controller
public class VerifyCode {
	/* 获取验证码图片 */
	protected final Logger logger = LoggerFactory.getLogger(this.getClass());

	@RequestMapping("/getVerifyCode")
	@ResponseBody
	public void getVerificationCode(HttpServletResponse response,
			HttpServletRequest request,HttpSession session) {

		try {

			int width = 180;

			int height = 45;

			BufferedImage verifyImg = new BufferedImage(width, height,
					BufferedImage.TYPE_INT_RGB);

			// 生成对应宽高的初始图片

			String randomText = VerifyCodeImg.drawRandomText(width, height,
					verifyImg);

			// 单独的一个类方法,出于代码复用考虑,进行了封装。

			// 功能是生成验证码字符并加上噪点,干扰线,返回值为验证码字符

			request.getSession().setAttribute("verifyCode", randomText);

			response.setContentType("image/png");// 必须设置响应内容类型为图片,否则前台不识别

			OutputStream os = response.getOutputStream(); // 获取文件输出流

			ImageIO.write(verifyImg, "png", os);// 输出图片流

			os.flush();

			os.close();// 关闭流

		} catch (IOException e) {

			this.logger.error(e.getMessage());

			logger.info("异常信息:",e);

		}

	}
	@RequestMapping("/checkVerifyCode")
	@ResponseBody
	public Map<String,Object> checkVerifyCode(HttpServletResponse response,
			HttpServletRequest request,HttpSession session,String code) {
		Map<String,Object> map = new HashMap<String, Object>();
		 String sessi
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值