SpringBoot结合kaptcha验证码工具(注解方式)

首先,在pom.xml中加入kaptcha的依赖

<!--验证码 -->
		<dependency>
			<groupId>com.github.penggle</groupId>
			<artifactId>kaptcha</artifactId>
			<exclusions>
				<exclusion>
					<artifactId>javax.servlet-api</artifactId>
					<groupId>javax.servlet</groupId>
				</exclusion>
			</exclusions>
		</dependency>

其次,在项目中创建CaptchaConfig类,对验证码进行配置。

@Configuration
public class CaptchaConfig
{
    @Bean(name = "captchaProducer")
    public DefaultKaptcha getKaptchaBean()
    {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        Properties properties = new Properties();
    	// 是否有边框
        properties.setProperty(KAPTCHA_BORDER, "no");
        // 验证码文本字符颜色
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");
        // 验证码文本字符大小
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38");
        // KAPTCHA_SESSION_KEY
        properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode");
        // 验证码文本字符长度
        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
        // 验证码文本字体样式 
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
        // 图片样式 
        properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

接着,编写Controller类,生成验证码。

@Controller
public class CaptchaController {
	
	private static final Logger log = LoggerFactory.getLogger(CaptchaController.class);


	@Resource(name = "captchaProducer")//配置类中的bean
	private Producer captchaProducer;

	@RequestMapping("/captcha")
	public ModelAndView captcha(HttpServletRequest request, HttpServletResponse response) {
		ServletOutputStream out = null;
		try {
			HttpSession session = request.getSession();
			response.setDateHeader("Expires", 0);
			response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
			response.addHeader("Cache-Control", "post-check=0, pre-check=0");
			response.setHeader("Pragma", "no-cache");
			response.setContentType("image/jpeg");
			
			String capStr = null;
			String code = null;
			BufferedImage bi = null;
			capStr = code = captchaProducer.createText();
			bi = captchaProducer.createImage(capStr);
			log.info("验证码:"+code);
			session.setAttribute(Constants.KAPTCHA_SESSION_KEY, code);
			out = response.getOutputStream();
			ImageIO.write(bi, "jpg", out);
			out.flush();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (out != null) {
					out.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
}

然后,编写页面代码,本样例使用layui。

<form method="post" class="layui-form" >
            <input name="username" placeholder="用户名"  type="text" lay-verify="required" class="layui-input" >
            <hr class="hr15">
            <input name="password" lay-verify="required" placeholder="密码"  type="password" class="layui-input">
            <hr class="hr15">
            <img th:src="@{/captcha}" style="height:50px;width:40%;float:left" id="captcha"/>
            <input name="password" lay-verify="required" placeholder="验证码"  type="text" class="layui-input" style="width:55%;float:right">
            <hr class="hr15">
            <input class="loginin" value="登录" lay-submit lay-filter="login" style="width:100%;" type="submit">
        </form>

最后,运行项目,查看效果,并且确认页面的验证码与实际输出验证码一致。

日志输出:

INFO  c.p.a.w.c.CaptchaController - [captcha,47] - 验证码:pfcd

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章