首先,在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