Java 驗證碼 kaptcha

簡單介紹:

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 中取到的真實值進行比較,即可判斷用戶驗證碼輸入的正確與否。

發佈了143 篇原創文章 · 獲贊 19 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章