Kaptcha 简介
Kaptcha 是一个可高度配置的实用验证码生成工具,可自由配置的选项如:
验证码的字体验证码字体的大小验证码字体的字体颜色验证码内容的范围(数字,字母,中文汉字!)验证码图片的大小,边框,边框粗细,边框颜色验证码的干扰线验证码的样式(鱼眼样式、3D、普通模糊、...)主要代码
KaptchaConfig.java
<code>
public
class
KaptchaConfig
{public
DefaultKaptchagetDDefaultKaptcha
()
{ DefaultKaptcha dk =new
DefaultKaptcha(); Properties properties =new
Properties(); properties.setProperty("kaptcha.border"
,"yes"
); properties.setProperty("kaptcha.border.color"
,"105,179,90"
); properties.setProperty("kaptcha.textproducer.font.color"
,"red"
); properties.setProperty("kaptcha.image.width"
,"110"
); properties.setProperty("kaptcha.image.height"
,"40"
); properties.setProperty("kaptcha.textproducer.font.size"
,"30"
); properties.setProperty("kaptcha.session.key"
,"code"
); properties.setProperty("kaptcha.textproducer.char.length"
,"4"
); properties.setProperty("kaptcha.textproducer.font.names"
,"宋体,楷体,微软雅黑"
); Config config =new
Config(properties); dk.setConfig(config);return
dk; } }/<code>控制器关键代码
<code>
public
class
KaptchaController
{ DefaultKaptcha defaultKaptcha;public
void defaultKaptcha(HttpServletRequest request, HttpServletResponse response) throws Exception { byte[] captcha =null
; ByteArrayOutputStreamout
= new ByteArrayOutputStream();try
{ String createText = defaultKaptcha.createText(); request.getSession().setAttribute("rightCode"
, createText); BufferedImage bi = defaultKaptcha.createImage(createText); ImageIO.write(bi,"jpg"
,out
); }catch
(Exception e) { response.sendError(HttpServletResponse.SC_NOT_FOUND);return
; } captcha =out
.toByteArray(); response.setHeader("Cache-Control"
,"no-store"
); response.setHeader("Pragma"
,"no-cache"
); response.setDateHeader("Expires"
,0
); response.setContentType("image/jpeg"
); ServletOutputStream sout = response.getOutputStream(); sout.write(captcha); sout.flush(); sout.close(); }public
ModelAndView imgvrifyControllerDefaultKaptcha(HttpServletRequest request, HttpServletResponse response) { ModelAndView model = new ModelAndView(); String rightCode = (String) request.getSession().getAttribute("rightCode"
); String tryCode = request.getParameter("tryCode"
); System.out
.println("rightCode:"
+ rightCode +" ———— tryCode:"
+ tryCode);if
(!rightCode.equals(tryCode)) { model.addObject("info"
,"验证码错误,请再输一次!"
); model.setViewName("login"
); }else
{ model.addObject("info"
,"登陆成功"
); model.setViewName("index"
); }return
model; }public
ModelAndView index() {return
new ModelAndView("login"
); } }/<code>前端页面
login.html
<code> >
<
html
xmlns:th
="http://www.thymeleaf.org"
><
head
lang
="en"
><
meta
charset
="UTF-8"
><
title
>Insert title heretitle
><
link
rel
="stylesheet"
href
="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css"
><
script
src
="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"
>script
><
script
src
="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"
>script
><
style
type
="text/css"
>
body
{padding
:10px
; }#inputtext
{width
:100%
; }#login
{width
:300px
;margin
:0px
auto;padding-top
:60px
; }#flushimg
{text-decoration
: underline; }#butt
{width
:60%
; }style
>head
><
body
><
div
id
="login"
><
form
action
="/login"
method
="post"
><
h2
align
="center"
>L O G I Nh2
><
br
/><
br
/><
input
type
="text"
name
="userName"
class
="form-control"
id
="inputtext"
required
autofocus
placeholder
="-----请输入用户名-----"
/><
br
/><
input
type
="password"
name
="userName"
class
="form-control"
id
="inputtext"
required
placeholder
="----请输入用户密码----"
/><
br
/><
div
id
="flushimg"
><
img
alt
="验证码"
onclick
="this.src='/defaultKaptcha?d=' + new Date()*1"
src
="/defaultKaptcha"
/><
a
>看不清?点击图片刷新一下a
>div
><
input
type
="text"
name
="tryCode"
class
="form-control"
required
placeholder
="-----请输入验证码-----"
/><
h4
th:text
="${info}"
style
="color: red"
>h4
><
input
type
="checkbox"
name
="rememberMe"
/>记住我<
br
/><
div
style
="width: 100%;text-align: center;"
><
input
type
="submit"
value
="登 录"
id
="butt"
class
="btn btn-success"
/>div
>form
>div
>body
>html
>/<code>