1. 캡차를 사용하기 위해 아래 링크로 접속해 사이트 등록을 진행한다. 

https://www.google.com/recaptcha/about/

 

 

2.  아래 이미지 순서로 수행한다!  캡챠는 여러 버전이 있으니 원하는바로 선택하면 된다. 

나는 체크박스 형태로 진행하기로 함! (체크박스를 원하면 그대로 따라하면 됨!)

 

 

도메인 부분에서 참고! 

로컬에서 테스트를 하려면 아래와 같이 localhost 등록도 해주어야한다. 

 

 

저장하면 비밀키와 사이트 키를 준다. 잘 저장해두자! 

 

 

이제 html를 작성해보자 

우선 캡차를 사용하기 위해 header에  스크립트를 추가해준다. 

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

 

원하는 위치에 체크박스 캡챠 추가. 

@captcha.getSite() ---> 이부분에 앞서 발급받은 사이트 키를 입력해준다!! 

<div id="recaptcha" class="g-recaptcha" th:attr="data-sitekey=${@captcha.getSite()}" data-callback="recaptchaCallback"></div>

 

화면을 새로고침하면 캡차가 표시되는걸 볼 수 있다. 

 

 

이제 사용자가 캡챠 수행을 했는지 여부를 스크립트 단에서 확인해본다. 

캡차를 수행하게되면 grecaptcha.getResponse() 에 값이 들어오게 되는데 

이 값을 기준으로 수행여부를 가볍게 체크해본다. 

 

if(grecaptcha.getResponse() == "") {
	alert("캡챠를 수행하세요!");
}

 

본 비즈니스 로직을 타기 전 서버단에서도 한번 더 체크해준다. 

 grecaptcha.getResponse() 값을 다시 구글에 검증하는 로직이다. 

나의 경우 Interceptor을 만들어 캡챠수행 여부를 검증하고 정상적이지 않은 경우 튕겨내는 방식으로 작업을 진행했다. 

public static boolean verifyRecaptcha(String recaptcha) {
    	final String SECRET_KEY = "구글 비밀키"; // 비밀키 호출
    	final String RE_URL = "https://www.google.com/recaptcha/api/siteverify";// 인증할 URL
    	
		try {
			URL obj = new URL(RE_URL);
			HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
			con.setRequestMethod("POST");
			
			String postParams = "secret=" + SECRET_KEY + "&response=" + recaptcha;
			con.setDoOutput(true);
			
			DataOutputStream wr = new DataOutputStream(con.getOutputStream());
			wr.writeBytes(postParams);
			wr.flush();
			wr.close();

			BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
			String inputLine;
			StringBuffer response = new StringBuffer();

			while ((inputLine = in.readLine()) != null) {
				response.append(inputLine);
			}
			in.close();

			JsonReader jsonReader = Json.createReader(new StringReader(response.toString()));
			JsonObject jsonObject = jsonReader.readObject();
			jsonReader.close();
			
			return jsonObject.getBoolean("success"); //최종 Return 값 : true or false
			
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

 

 

 

+ Recent posts