簡單介紹:
kaptcha 是一個擴展自 simplecaptcha 的驗證碼庫,在 Java 編程中是一個非常實用的驗證碼生成工具。我們可以利用這個工具生成各種樣式的驗證碼,因爲它是可配置的,我們可以根據需求定製。
工作原理:
kaptcha 的工作原理是調用 com.google.code.kaptcha.servlet.KaptchaServlet ,生成一個驗證碼圖片,響應到客戶端,同時將生成的真是的驗證碼字符串放到 HttpSession 中。
使用方法(Dynamic Web Project 爲例):
1、使用這個工具(或者說是插件),首先需要在工程中導入kaptcha 的 jar 包,我使用的是 kaptcha-2.3.2.jar。
2、需要在 web.xml 中配置 kaptcha 的 Servlet
<servlet>
<servlet-name>Kaptcha</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Kaptcha</servlet-name>
<url-pattern>/kaptcha.jpg</url-pattern>
</servlet-mapping>
3、在 jsp 或者 html 等文件中使用的時候,只需要加上一個 img 標籤即可顯示驗證碼
<img src="kaptcha.jpg">
注意:該 img 標籤的 src 屬性不一定非要這麼命名,但是其資源路徑必須對應於我們在 web.xml 中的 Servlet 配置,這兩個地方必須保持一致
<url-pattern>/kaptcha.jpg</url-pattern>
完成上面3步之後,驗證碼的效果就能出來。效果都是默認的,爲了得到更爲美觀更爲符合需求的驗證碼,此時我們就可以自己配置一些參數。
例如,在 Servlet 中配置四個初始化參數,設定生成驗證碼圖片的高度、寬度、驗證碼字符都是數字、去掉背景的干擾線
<servlet>
<servlet-name>Kaptcha</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<!-- 設定寬度 -->
<init-param>
<param-name>kaptcha.image.width</param-name>
<param-value>100</param-value>
</init-param>
<!-- 設定高度 -->
<init-param>
<param-name>kaptcha.image.height</param-name>
<param-value>50</param-value>
</init-param>
<!-- 驗證碼的字符都是數字 -->
<init-param>
<param-name>kaptcha.textproducer.char.string</param-name>
<param-value>0123456789</param-value>
</init-param>
<!-- 去掉干擾線 -->
<init-param>
<param-name>kaptcha.noise.impl</param-name>
<param-value>com.google.code.kaptcha.impl.NoNoise </param-value>
</init-param>
</servlet>
類似於這樣的配置還有很多,這裏列出一些常用的配置選項,想要更全的可以去網上查找
kaptcha.border 是否有邊框 默認爲true 我們可以自己設置yes,no
kaptcha.border.color 邊框顏色 默認爲Color.BLACK
kaptcha.border.thickness 邊框粗細度 默認爲1
kaptcha.producer.impl 驗證碼生成器 默認爲DefaultKaptcha
kaptcha.textproducer.impl 驗證碼文本生成器 默認爲DefaultTextCreator
kaptcha.textproducer.char.string 驗證碼文本字符內容範圍 默認爲abcde2345678gfynmnpwx
kaptcha.textproducer.char.length 驗證碼文本字符長度 默認爲5
kaptcha.textproducer.font.names 驗證碼文本字體樣式 默認爲new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
kaptcha.textproducer.font.size 驗證碼文本字符大小 默認爲40
kaptcha.textproducer.font.color 驗證碼文本字符顏色 默認爲Color.BLACK
kaptcha.textproducer.char.space 驗證碼文本字符間距 默認爲2
kaptcha.noise.impl 驗證碼噪點生成對象 默認爲DefaultNoise
kaptcha.noise.color 驗證碼噪點顏色 默認爲Color.BLACK
kaptcha.obscurificator.impl 驗證碼樣式引擎 默認爲WaterRipple
kaptcha.word.impl 驗證碼文本字符渲染 默認爲DefaultWordRenderer
kaptcha.background.impl 驗證碼背景生成器 默認爲DefaultBackground
kaptcha.background.clear.from 驗證碼背景顏色漸進 默認爲Color.LIGHT_GRAY
kaptcha.background.clear.to 驗證碼背景顏色漸進 默認爲Color.WHITE
kaptcha.image.width 驗證碼圖片寬度 默認爲200
kaptcha.image.height 驗證碼圖片高度 默認爲50
java 代碼中獲取真實驗證碼,只需要從 HttpSession 中取 com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY 這個值即可,例如在
Servlet 中取值
String vcode = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
客戶端(瀏覽器)通過表單輸入提交過來的驗證碼值,與我們從 HttpSession 中取到的真實值進行比較,即可判斷用戶驗證碼輸入的正確與否。