2016-11-03 15 views
0

私はSpring MVCアプリケーションでCaptchaを実装しようとしています。それを行う方法の例がいくつかありますが、JQuery AJAXでフォームが送信された場所を見つけることができず、テンプレートエンジンはThymeleafです。ThymeleafとJQuery AJAXを使用してAntibot CaptchaをJava Spring MVCで実装する

私の主な情報源はthisです。

私は依存関係とサーブレットを追加しましたが、テンプレート部分(コントローラにフォームを送信するためにThymeleafとJQuery AJAXを使用しています)と苦労しています。

私は必ずしもCaptchaを反抗フレームワークとして使用したいとは思わないので、他のフレームワークを使用しているアイデアがあれば、私はそれを聞いて嬉しいです。

+0

あなたはこれまでに何を持っていますか? – kenorb

答えて

0

私はCage Captcha generatorを使用して終了しました。これはMavenと統合することができ、JQuery AJAXを使用したSpring MVCアプリケーションで実装するのはかなり簡単です。提供キャプチャが正しくない場合

if (!httpSession.getAttribute("captchaToken").equals(bindingData.getCaptchaCode())) { 
     return new ResponseEntity<>(HttpStatus.BAD_REQUEST); 
} 

最後に、私は新しいものを生成します。私は、オブジェクトを作成していたときに与えられたコードがセッションに保存されているものを、等しい場合

/** 
* Generates captcha as image and returns the image path 
* stores the captcha code in the http session 
* and deletes older, unused captcha images. 
*/ 
@RequestMapping(value = "/captcha/generate", method = RequestMethod.GET, produces="application/json") 
@ResponseBody 
public ResponseEntity<CaptchaRequestData> generateCaptcha(HttpSession session) { 
    String captchaImageUploadDirectory = environment.getProperty("captcha_image_folder"); 
    String captchaWebAlias = environment.getProperty("captcha_web_alias"); 

    //Creating dir or making new one if it doesn't exist 
    File file = new File(captchaImageUploadDirectory); 
    if (!file.exists()) { 
     try { 
      file.mkdirs(); 
     } catch(Exception e){} 
    } 

    String timeSuffix = DBUtils.getDateTimeAsString(); 
    String fileName = CAPTCHA_IMAGE_PREFIX + timeSuffix + "." + CAPTCHA_IMAGE_EXTENSION; 
    String fullFilename = captchaImageUploadDirectory + fileName; 

    //Generating the captcha code and setting max length to 4 symbols 
    Cage currGcage = new YCage(); 
    String captchaToken = currGcage.getTokenGenerator().next(); 

    if (captchaToken.length() > CAPTCHA_CODE_MAX_LENGTH) { 
     captchaToken = captchaToken.substring(0, CAPTCHA_CODE_MAX_LENGTH).toUpperCase(); 
    } 

    //Setting the captcha token in http session 
    session.setAttribute("captchaToken", captchaToken); 

    try { 
     OutputStream os = new FileOutputStream(fullFilename, false); 
     currGcage.draw(captchaToken, os); 
     os.flush(); 
     os.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    deleteFilesOlderThan(captchaImageUploadDirectory, CAPTCHA_IMAGE_LIFE_MILLISECONDS, CAPTCHA_IMAGE_EXTENSION); 

    CaptchaRequestData data = new CaptchaRequestData(captchaWebAlias + fileName); 

    return new ResponseEntity<>(data, HttpStatus.OK); 
} 

は、それから私は確認してください。

関連する問題