springboot验证码

在这里插入图片描述

主要代码

package springboot.com.yzm;

import com.github.bingoohuang.patchca.color.RandomColorFactory;
import com.github.bingoohuang.patchca.custom.ConfigurableCaptchaService;
import com.github.bingoohuang.patchca.word.RandomWordFactory;

public class CaptchaFactory {

    private static ConfigurableCaptchaService cs = new ConfigurableCaptchaService();

    static {
        cs.setColorFactory(new RandomColorFactory());
        RandomWordFactory wf = new RandomWordFactory();
        wf.setCharacters("1234567890");
        wf.setMaxLength(4);
        wf.setMinLength(4);
        cs.setWordFactory(wf);
    }

    public static ConfigurableCaptchaService getInstance() {
        return cs;
    }
}

package springboot.com.yzm;


import com.github.bingoohuang.patchca.custom.ConfigurableCaptchaService;
import com.github.bingoohuang.patchca.filter.FilterFactory;
import com.github.bingoohuang.patchca.filter.predefined.*;
import com.github.bingoohuang.patchca.utils.encoder.EncoderHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

@Controller
@RequestMapping("/security")
public class ValidateController {

    /**
     * 日志对象
     */
    protected final Logger logger = LoggerFactory.getLogger(getClass());

    private static final long serialVersionUID = 1L;

    private static ConfigurableCaptchaService cs = CaptchaFactory.getInstance();

    private static List<FilterFactory> factories;

    static {
        factories = new ArrayList<FilterFactory>();
        factories.add(new CurvesRippleFilterFactory(cs.getColorFactory()));
        factories.add(new MarbleRippleFilterFactory());
        factories.add(new DoubleRippleFilterFactory());
        factories.add(new WobbleRippleFilterFactory());
        factories.add(new DiffuseRippleFilterFactory());
    }

    @RequestMapping("/getImage")
    public void getImage(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        try {
            cs.setFilterFactory(factories.get(new Random().nextInt(5)));
            setResponseHeaders(response);

            String token = EncoderHelper.getChallangeAndWriteImage(cs, "png",
                    response.getOutputStream());
            session.setAttribute("TEST_YZM", token);
            logger.info("当前的SessionID = " + session.getId() + ",  验证码 = " + token);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void setResponseHeaders(HttpServletResponse response) {
        response.setContentType("image/png");
        response.setHeader("Cache-Control", "no-cache, no-store");
        response.setHeader("Pragma", "no-cache");
        long time = System.currentTimeMillis();
        response.setDateHeader("Last-Modified", time);
        response.setDateHeader("Date", time);
        response.setDateHeader("Expires", time);
    }


}

package springboot.com.yzm;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping(value = "/yzm")
public class YzmTestController {

    @RequestMapping(value = "/cap")
    public String cap(HttpServletRequest request, HttpServletResponse response) {
        return "/yzm/cap";
    }

    @ResponseBody
    @RequestMapping(value = "/validate")
    public String validate(HttpServletRequest request, HttpServletResponse response, String yzmCode) {

        System.out.println("用户输入的验证码为yzmCode=" + yzmCode);
        String yzm = (String) request.getSession().getAttribute("TEST_YZM");
        String prin = "";
        if (!StringUtils.equals(yzm, yzmCode)) {
            prin = "##########################################验证码输入错误############################################";
        } else {
            prin = "******************************************验证码输入成功********************************************";
        }
        System.out.println(prin);
        return prin;
    }
}

<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>yzm</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <script th:src="@{/js/jquery.min.js}"></script>
</head>

<body>
<form method="post" action="/yzm/validate">
    <div class="p-new-in">
        <span class="p-new-inname">验证码</span>
        <input type="text" name="yzmCode" class="p-new-input p-new-w177" placeholder="请输入图片验证码"/>
    <span class="p-new-code l-mar-r15"> <img src="/security/getImage.htm" class="reloadImage" id="reloadImage"
                                             width="121" height="40"/> </span>
        <a href="javaScript:;" class="l-color9 reloadImage">看不清楚,换一张</a>
        <input type="submit" value="验证" style="color: red;"/>
    </div>
</form>
</body>

<script th:src="@{/js/jquery.min.js}"></script>
<script th:inline="javascript">
    $(".reloadImage").click(function () {
        //获取当前的时间作为参数,无具体意义
        var timenow = new Date().getTime();
        $('#reloadImage').attr("src", "/security/getImage.htm?date=" + timenow);
    });
</script>
</html>

最下边附上我的码云地址
https://gitee.com/anlijie/springboot-verification
如果好的话,给个star吧
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值