簡單Maven的Web專案之驗證碼(Kaptcha篇)
一:Kaptcha介紹
簡單介紹:
kaptcha 是一個擴充套件自 simplecaptcha 的驗證碼庫,在 Java 程式設計中 是一個非常實用的驗證碼生成工具。我們可以利用這個工具生成各種樣式的驗證碼,因為它是可配置的,我們可以根據需求定製。
工作原理:
kaptcha 的工作原理是呼叫 com.google.code.kaptcha.servlet.KaptchaServlet ,生成一個驗證碼圖片,響應到客戶端,同時將生成的真是的驗證碼字串放到 HttpSession 中。
使用kaptcha可以方便的配置:
- 驗證碼的字型
- 驗證碼字型的大小
- 驗證碼字型的字型顏色
- 驗證碼內容的範圍(數字,字母,中文漢字!)
- 驗證碼圖片的大小,邊框,邊框粗細,邊框顏色
- 驗證碼的干擾線(可以自己繼承com.google.code.kaptcha.NoiseProducer寫一個自定義的干擾線)
- 驗證碼的樣式(魚眼樣式、3D、普通模糊……當然也可以繼承com.google.code.kaptcha.GimpyEngine自定義樣式)
二:使用Kaptcha生成驗證碼
-
mvn install:install-file-DgroupId=com.google.code -DartifactId=kaptcha -Dversion=2.3.2-Dfile=D:\kaptcha-2.3.jar -Dpackaging=jar
-
<dependency> <groupId>com.google.code</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency>
<!-- 驗證碼 -->
<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
<property name="config">
<bean class="com.google.code.kaptcha.util.Config">
<constructor-arg>
<props>
<prop key="kaptcha.border">yes</prop>
<prop key="kaptcha.border.color">105,179,90</prop>
<prop key="kaptcha.textproducer.font.color">blue</prop>
<prop key="kaptcha.image.width">105</prop>
<prop key="kaptcha.image.height">40</prop>
<prop key="kaptcha.textproducer.font.size">30</prop>
<prop key="kaptcha.session.key">s_kaptcha_code</prop>
<prop key="kaptcha.textproducer.char.space">2</prop>
<prop key="kaptcha.textproducer.char.length">5</prop>
<prop key="kaptcha.textproducer.font.names">宋體,楷體,微軟雅黑</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean> -
@Autowired
private com.google.code.kaptcha.impl.DefaultKaptcha captchaProducer; -
@RequestMapping(value = "/login/captcha.jpg")
public ModelAndView getCaptcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
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 capText = captchaProducer.createText();
request.getSession().setAttribute(Consts.S_KaptchaCode, capText);
BufferedImage bi = captchaProducer.createImage(capText);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(bi, "jpg", out);
try {
out.flush();
} finally {
out.close();
}
return null;
}