JCAPTCHA는 매우 강력합니다. 이미지 기반 검증 코드뿐만 아니라 사운드 기반 검증 코드도 생성 할 수 있습니다 (SINA는 두 가지 검증 코드를 사용합니다). 이 기사에서는 JCAPTCHA 라이브러리 및 사용 예제를 간략하게 소개합니다. 아래를 살펴 보겠습니다.
JCAPTCHA 라이브러리를 다운로드하십시오
Maven 의존성은 다음과 같이 추가됩니다.
<pectionency> <groupid> com.octo.captcha </groupid> <artifactid> jcaptcha </artifactid> <버전> 1.0 </version> </fectionency>
간단한 클래스를 캡슐화했습니다
import com.octo.captcha.component.image.backgroundgenerator.backgroundgenerator; import com.octo.captcha.component.image.backgroundgenerator.filereaderrandombackgroundgenerator; import com.octo.captcha.component.mage.color.randomlistcolorgenerator; 수입 com.octo.captcha.component.image.fontgenerator.fontgenerator; import com.octo.captcha.component.image.fontgenerator.randomfontgenerator; import com.octo.captcha.component.image.textpaster.decoratedrandomtextpaster; image; com.octo.captcha.component.image.textpaster.textpaster; image com.octo.captcha.component.image.textpaster.textDecorator.textDecorator; image com.octo.captcha.component.image.wordtoimage.comportedwordtoimage; com.octo.captcha.component.image.wordtoimage.image.wordtoimage; image com.octo.captcha.component.word.wordgenerator.randomwordgenerator; import com.octo.captcha.component.word.wordgenerator.wordgenerator; import com.octo.captcha.engine.captchaengine; com.octo.captcha.engine.image.listimagecaptchaengine; import com.octo.captcha.image.gimpy.gimpyfactory; import java.awt.*;/***클래스를 생성하는 클래스*/public class capchahelper {private static final intger min_word _lenger = 4; // verification private inte private inte. max_word_length = 4; // 최대 검증 코드 개인 정적 최종 정수 이미지 _height = 30; // 검증 코드 높이 이미지 높이 개인 정적 정적 정적 정적 정수 im 개인 정적 최종 문자열 random_word = "0123456789"; // 랜덤 문자 // 검증 코드에 대한 임의의 글꼴 개인 정적 최종 글꼴 [] random_font = new Font [] {new font ( "nyala", font.bold, min_font_size), New Font ( "Arial", font.bold, minfont_size) font.bold, min_font_size), 새 글꼴 ( "Credit Valley", font.bold, min_font_size), 새 글꼴 ( "충격", font.bold, min_font_size)}; // 검증 코드 랜덤 색상 개인 정적 최종 색상 [] random_color = new Color [] {새 색상 (255, 255, 255), 새로운 색 (255, 220, 220), 새로운 색 (220, 255, 255), 새로운 색상 (220, 220, 255), 새로운 색 (255, 255, 220), 새로운 색상 (220, 225, 220)}; 개인 정적 정적 Listimagecaptchaengine Captchaengine; public static captchaengine getcaptchaengine (Final String imgpath) {if (captchaengine == null) {synchronized (capchahelper.class) {if (captchaengine == null && imgpath! = null) {captchaengine = new listimagecaptchaengine () () { @voidevoloce () {randomListColorGenerator RandomListColorGenerator = New RandomListColorgenerator (Random_Color); BackgroundGenerator BackgroundGenerator = New FilereAderRandombackbackgroundGenerator (Image_Width, Image_Height, ImgPath); WordGenerator WordGenerator = New RandomWordGenerator (random_word); fontgenerator fontgenerator = new randomfontgenerator (min_font_size, max_font_size, random_font); TextDecorator [] textDecorator = new TextDecorator [] {}; TextPaster TextPaster = New DecoratedRandomTextPaster (Min_Word_Length, Max_Word_length, RandomListColorgenerator, TextDecorator); WordToImage WordToImage = 새로운 ComposedWordtoImage (FontGenerator, BackgroundGenerator, TextPaster); AddFactory (New GimpyFactory (WordGenerator, WordToImage)); }}; }}} return captchaengine; }}웹 페이지에서 올바른 코드 이미지 요청에 응답
이 요청에 응답하기 위해 servlet 정의 할 수 있습니다. springMVC 사용하는 경우 Controller 의 메소드를 사용 하여이 요청에 응답 할 수도 있습니다. 어쨌든 경로는 :”/aaa/captcha” 와 같은 servlet或controller 에 해당하는 메소드를 지정해야합니다.
그런 다음 이 경로에 대한 요청에 응답하는 서블릿 에서 다음과 같이 쓸 수 있습니다.
// 검증 코드의 배경 이미지를 얻는 경로를 얻습니다. 이 경로는 많은 이미지를 배경 문자열 Captcha_backgrounds = session.getServletContext (). getRealPath ( "/web-inf/img/captcha")로 배치합니다. CARTCHAENGINE CE = CAPCHAHELPER.GETCAPTCHAENGINE (Captcha_backgrounds); // 현재 확인 코드는 관리자 웹 페이지에서 JS를 사용하여 서버에서 얻어야합니다. CAPTCHA CAPTCHA = CE.GETNEXTCAPTCHA (); // 확인을 위해 클라이언트가 확인 코드 req.getSession (). setAttribute ( "Captcha", Captcha)를 제출할 때를 확인하기 위해 Captcha 객체를 세션에 넣습니다. // 검증 코드 이미지를 가져 오십시오. 이것은 압축되지 않은 비트 맵 BufferedImage image = (bufferedImage) captcha.getchallenge (); resp.setContentType ( "image/jpeg"); imageio.write (image, "jpg", resp.getoutputStream ());
SpringMVC를 사용하는 경우 다음과 같이 작성하십시오.
// 검증 코드의 배경 이미지를 얻는 경로를 얻습니다. 이 경로는 많은 이미지를 배경 문자열 Captcha_backgrounds = session.getServletContext (). getRealPath ( "/web-inf/img/captcha")로 배치합니다. CARTCHAENGINE CE = CAPCHAHELPER.GETCAPTCHAENGINE (Captcha_backgrounds); // 관리 웹 페이지의 서버에서 현재 확인 코드를 얻으려면 JS를 사용해야합니다. CAPTCHA CAPTCHA = CE.GETNEXTCAPTCHA (); // 확인을 위해 CARTCHA 객체를 세션에 넣어 세션을 확인하십시오. // 검증 코드 이미지를 가져 오십시오. 이것은 압축되지 않은 비트 맵 BufferedImage image = (bufferedImage) captcha.getchallenge (); bytearrayoutputStream bao = 새로운 BytearRayoutputStream (); // JPG에 응축되어 출력 스트림 imageio.write (image, "jpg", bao)에 작성해야합니다. return bao.tobytearray ();
두 가지면에서, 반환 된 바이너리 데이터는 클라이언트에게.
String captcha_backgrounds = session.getServletContext().getRealPath(“/WEB-INF/img/captcha”);
다음 경로 /WEB-INF/img/captcha Verification Code 이미지의 배경으로 여러 그림과 함께 배치됩니다. JPEG 여야합니다. 크기에는 제한이 없을 수 있습니다. 직접 시도 할 수 있습니다.
웹 페이지 에서이 주소를 가리 키려면 <Img>을 사용하십시오.
<img id = "captcha"src = " /captcha_img"onclick = "refreshcaptchaimg ()" />
JS 함수 refreshCaptchaImg() 는 이미지 클릭에 응답합니다. 클릭 할 때마다 새 확인 코드 이미지가 검색됩니다. 올바른 코드 이미지를 다시 접수하는 방법은 무엇입니까?
IMG의 SRC 속성을 변경하지만 여기 에이 속성을 매번 동일한 주소로 설정하여 실제 새로 고침이 발생하지 않으므로 Method refreshCaptchaImg() 다음과 같이 구현됩니다.
함수 refortyCaptChaimg () {// 서버에서 검증 코드 사진을 다시 다운로드합니다. // 강제 새로 고침을 위해 순수 하게이 장소에 매개 변수를 추가합니다. 그렇지 않으면 브라우저는 SRC가 가리키는 URL 주소가 변경되지 않았기 때문에 이미지를 실제로 새로 고치지 않습니다. var now = new 날짜 ( "#captcha").위의 것은 Java의 Verification Code Generation Library 인 Jcaptcha의 소개 및 사용입니다. 모든 사람이 자바를 배우는 것이 도움이되기를 바랍니다.