Spring mvcとJKaptchaを組み合わせて認証コードを生成します.
8635 ワード
kaptchaは非常に実用的な検証コード生成ツールです.これにより、様々なパターンの検証コードが生成されます.これは構成可能です.kaptchaの仕事の原理は、comple.google.co.kaptcha.servlet.KaptchaServletを呼び出して、1つの画像を生成することです.同時に生成された検証コード文字列をHttpSessionに入れます.
kaptchaを使うと便利な配置ができます.
認証コードのフォント
コードフォントのサイズを確認します.
認証コードフォントのフォント色
コード内容の範囲(数字、アルファベット、中国語の漢字!)を検証します.
コード画像のサイズ、フレーム、フレームの太さ、フレームの色を確認します.
認証コードの干渉線(自分でcomple.google.co.kaptcha.Noise Producerを継承して、ユーザー定義の干渉線を書くことができます.)
検証コードのスタイル(魚眼スタイル、3 D、普通はぼやけています.もちろん、comple.co.kaptcha.GuimpyEnggineのカスタムスタイルも継承できます.)
……
詳細は下記のweb.xmlファイルをご覧ください.
使い方を紹介します.
1.まず公式サイトに行ってjarをダウンロードする:http://code.google.com/p/kaptcha/
2.ウェブプロジェクトを構築し、kaptcha-23.3.jarを環境変数に導入する.
3.web.xmlファイルの設定
1.web.xmlではなく、appication Controtext.xmlに配置します.
kaptchaを使うと便利な配置ができます.
認証コードのフォント
コードフォントのサイズを確認します.
認証コードフォントのフォント色
コード内容の範囲(数字、アルファベット、中国語の漢字!)を検証します.
コード画像のサイズ、フレーム、フレームの太さ、フレームの色を確認します.
認証コードの干渉線(自分でcomple.google.co.kaptcha.Noise Producerを継承して、ユーザー定義の干渉線を書くことができます.)
検証コードのスタイル(魚眼スタイル、3 D、普通はぼやけています.もちろん、comple.co.kaptcha.GuimpyEnggineのカスタムスタイルも継承できます.)
……
詳細は下記のweb.xmlファイルをご覧ください.
使い方を紹介します.
1.まず公式サイトに行ってjarをダウンロードする:http://code.google.com/p/kaptcha/
2.ウェブプロジェクトを構築し、kaptcha-23.3.jarを環境変数に導入する.
3.web.xmlファイルの設定
<!--Kaptcha --><!--
<servlet>
<servlet-name>kaptcha</servlet-name>
<servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
<init-param>
<param-name>kaptcha.border</param-name>
<param-value>no</param-value>
</init-param>
<init-param>
<param-name>kaptcha.border.color</param-name>
<param-value>105,179,90</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.font.color</param-name>
<param-value>red</param-value>
</init-param>
<init-param>
<param-name>kaptcha.image.width</param-name>
<param-value>250</param-value>
</init-param>
<init-param>
<param-name>kaptcha.image.height</param-name>
<param-value>90</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.font.size</param-name>
<param-value>70</param-value>
</init-param>
<init-param>
<param-name>kaptcha.session.key</param-name>
<param-value>code</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.char.length</param-name>
<param-value>4</param-value>
</init-param>
<init-param>
<param-name>kaptcha.textproducer.font.names</param-name>
<param-value> , , </param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>kaptcha</servlet-name>
<url-pattern>/ClinicCountManager/kaptcha.jpg</url-pattern>
</servlet-mapping>
jspページ使用
<table>
<tr>
<td><img src="/ClinicCountManager/kaptcha.jpg"></td>
<td valign="top">
<form method="POST">
<br>sec code:<input type="text" name="kaptchafield"><br />
<input type="submit" name="submit">
</form>
</td>
</tr>
</table>
<br /><br /><br /><br />
<%
String c = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
String parm = (String) request.getParameter("kaptchafield");
out.println("Parameter: " + parm + " ? Session Key: " + c + " : ");
if (c != null && parm != null) {
if (c.equals(parm)) {
out.println("<b>true</b>");
} else {
out.println("<b>false</b>");
}
%>
上の配置は普通のjsp環境下で有効であり、spring mvc環境下でsession値が取れない場合、sping mvc環境検証コードの配置は以下の通りである.1.web.xmlではなく、appication Controtext.xmlに配置します.
<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">no</prop>
<prop key="kaptcha.border.color">105,179,90</prop>
<prop key="kaptcha.textproducer.font.color">red</prop>
<prop key="kaptcha.image.width">250</prop>
<prop key="kaptcha.textproducer.font.size">90</prop>
<prop key="kaptcha.image.height">90</prop>
<prop key="kaptcha.session.key">code</prop>
<prop key="kaptcha.textproducer.char.length">4</prop>
<prop key="kaptcha.textproducer.font.names"> , , </prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>
新規作成ピクチャ制御クラス
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
@Controller
@RequestMapping("/")
public class CaptchaImageCreateController {
private Producer captchaProducer = null;
@Autowired
public void setCaptchaProducer(Producer captchaProducer) {
this.captchaProducer = captchaProducer;
}
@RequestMapping("/captcha-image")
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setDateHeader("Expires", 0);
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
// return a jpeg
response.setContentType("image/jpeg");
// create the text for the image
String capText = captchaProducer.createText();
// store the text in the session
request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
// create the image with the text
BufferedImage bi = captchaProducer.createImage(capText);
ServletOutputStream out = response.getOutputStream();
// write the data out
ImageIO.write(bi, "jpg", out);
try {
out.flush();
} finally {
out.close();
}
return null;
}
}
フロントコール方式
<div class="chknumber">
<label> :
<input name="kaptcha" type="text" id="kaptcha" maxlength="4" class="chknumber_input" />
</label>
<img src="/ClinicCountManager/captcha-image.do" width="55" height="20" id="kaptchaImage" style="margin-bottom: -3px"/>
<script type="text/javascript">
$(function(){
$('#kaptchaImage').click(function () {//
$(this).hide().attr('src', '/ClinicCountManager/captcha-image.do?' + Math.floor(Math.random()*100) ).fadeIn(); })
});
</script>
</div>
認証方式:
String code = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);