Spring 集成kaptcha图片二维码

引入依赖

<!--验证码-->
<dependency>
    <groupId>com.github.penggle</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>

注册Bean

<bean class="com.google.code.kaptcha.impl.DefaultKaptcha" id="kaptcha">
    <property name="config">
        <bean class="com.google.code.kaptcha.util.Config">
            <constructor-arg>
                <props>
                    <prop key="kaptcha.border">no</prop>
                    <prop key="kaptcha.image.width">120</prop>
                    <prop key="kaptcha.textproducer.font.color">blue</prop>
                    <prop key="kaptcha.textproducer.font.size">40</prop>
                    <prop key="kaptcha.textproducer.char.length">4</prop>
                </props>
            </constructor-arg>
        </bean>
    </property>
</bean>

二维码请求控制器编写

@Controller
public class KaptchaController {
    @Resource
    private Producer kaptcha;

    @GetMapping("/verify_code")
    public void createVerifyCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
        response.setHeader("Pragma", "no-cache");
        response.setDateHeader("Expires", 0);
        response.setContentType("image/png");
        //产生而二维码
        String verifyCode = kaptcha.createText();
        request.getSession().setAttribute("verifyCode", verifyCode);
        BufferedImage image = kaptcha.createImage(verifyCode);

        ServletOutputStream outputStream = response.getOutputStream();
        ImageIO.write(image, "png", outputStream);
        outputStream.flush();
        outputStream.close();
    }
}

注册验证二维码


    @PostMapping("/registe")
    @ResponseBody
    public Map registe(String vc, String username, String password, String nickname, HttpServletRequest request) {
        String verifyCode = (String) request.getSession().getAttribute("verifyCode");
        HashMap<String, Object> result = new HashMap<>();
        if (vc == null || !vc.equalsIgnoreCase(verifyCode)) {
            result.put("code", "VC01");
            result.put("msg", "验证码错误");
        } else {
            result.put("code", "0");
            result.put("msg", "success");
        }
        return result;
    }

完成 kaptcha 图片二维码 效验逻辑 · MingCaiXiong/spring-learn@f9d0cfa