1. Google reCAPTCHA 사이트에 들어가 admin console 사이트를 등록 및 키값 가져오기
https://www.google.com/recaptcha/about/
2. 라이브러리 등록
<!-- 구글 리캡챠 사용하기 위한 json //시작 --> <dependency> <groupId>net.tanesha.recaptcha4j</groupId> <artifactId>recaptcha4j</artifactId> <version>0.0.7</version> </dependency> <dependency> <groupId>javax.json</groupId> <artifactId>javax.json-api</artifactId> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.json</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <!-- 구글 리캡챠 사용하기 위한 json //끝 -->
3. ReCaptchaController 컨트롤 생성
import java.io.IOException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.sam.coffeeshop.domain.VerifyRecaptcha; @Controller public class ReCaptchaController { @ResponseBody @PostMapping(value = "VerifyRecaptcha") public ResponseEntity<?> VerifyRecaptcha(String recaptcha) throws IOException { VerifyRecaptcha.setSecretKey("키값"); return ResponseEntity.status(HttpStatus.OK).body(VerifyRecaptcha.verify(recaptcha)); } }
4. VerifyRecaptcha.java 생성
package com.sam.coffeeshop.domain; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import javax.net.ssl.HttpsURLConnection; import lombok.extern.slf4j.Slf4j; @Slf4j public class VerifyRecaptcha { public static final String url = "https://www.google.com/recaptcha/api/siteverify"; private final static String USER_AGENT = "Mozilla/5.0"; private static String secret = ""; // local public static void setSecretKey(String key) { secret = key; } public static Object verify(String gRecaptchaResponse) throws IOException { if (gRecaptchaResponse == null || "".equals(gRecaptchaResponse)) { return false; } try { URL obj = new URL(url); HttpsURLConnection con = (HttpsURLConnection) obj.openConnection(); // add reuqest header con.setRequestMethod("POST"); con.setRequestProperty("User-Agent", USER_AGENT); con.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); String postParams = "secret=" + secret + "&response=" + gRecaptchaResponse; // Send post request con.setDoOutput(true); DataOutputStream wr = new DataOutputStream(con.getOutputStream()); wr.writeBytes(postParams); wr.flush(); wr.close(); int responseCode = con.getResponseCode(); log.info("Post parameters : {} ", postParams); log.info("Response Code : {} ", responseCode); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); return response; } catch (Exception e) { e.printStackTrace(); return false; } } }
5.View
<form id="frm1"> <div class="g-recaptcha" data-sitekey="구글사이트에서 사용자에게 제공하는 HTML 코드"></div> <button type="button" id="qnaRegBtn">등록</button> </form> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <!-- 구글 리캡차 --> <script src='https://www.google.com/recaptcha/api.js'></script> <script type="text/javascript"> $(function() { $('#qnaRegBtn').click(function() { $.ajax({ url: '/VerifyRecaptcha', type: 'post', data: {recaptcha: $("#g-recaptcha-response").val()}, success: function(res) { const data=JSON.parse(res); if(data.success){ //alert("자동 가입 방지 봇 통과"); $("#frm1").submit(); }else{ alert("자동 가입 방지 봇을 확인 한뒤 진행 해 주세요."); } } }); }); }); </script>
댓글 ( 4)
댓글 남기기