Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Spring
- Eclipse
- 알고리즘
- 넥사크로
- JPA
- mybatis
- Vue
- 방법
- GitHub
- 프로그래머스
- aws
- kotlin
- 오라클
- 스프링
- db
- IntelliJ
- Java
- jquery
- Git
- 생성
- 자바
- 함수
- error
- Security
- oracle
- 시큐리티
- 에러
- 쿼리
- 코틀린
- JavaScript
Archives
- Today
- Total
송민준의 개발노트
(spring) recaptcha v2 구현하기 - localhost test 본문
recaptcha 구현해볼라다가 구글에서 localhost 형식은 안된다고 해서 애를 먹다가
해결 방법을 찾았다.
1. recaptcha로 이동 후 생성 (아래처럼 해주면된다.)
2. 사이트 키와 비밀 키 확인
3. Spring STS로 가자! pom.xml에 다음 dependency를 추가해준다.
<!-- 구글 리캡챠 -->
<dependency>
<groupId>net.tanesha.recaptcha4j</groupId>
<artifactId>recaptcha4j</artifactId>
<version>0.0.7</version>
</dependency>
<!-- 구글 리캡챠 사용하기 위한 json -->
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.1.2</version>
</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>
<version>2.9.5</version>
</dependency>
4. java파일 추가
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.URL;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import javax.net.ssl.HttpsURLConnection;
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 boolean 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();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + postParams);
System.out.println("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();
// print result
System.out.println(response.toString());
//parse JSON response and return 'success' value
JsonReader jsonReader = Json.createReader(new StringReader(response.toString()));
JsonObject jsonObject = jsonReader.readObject();
jsonReader.close();
return jsonObject.getBoolean("success");
}catch(Exception e){
e.printStackTrace();
return false;
}
}
}
5. 컨트롤러.java 코드 추가
@ResponseBody
@RequestMapping(value = "VerifyRecaptcha", method = RequestMethod.POST)
public int VerifyRecaptcha(HttpServletRequest request) {
VerifyRecaptcha.setSecretKey("시크릿 코드");
String gRecaptchaResponse = request.getParameter("recaptcha");
try {
if(VerifyRecaptcha.verify(gRecaptchaResponse))
return 0; // 성공
else return 1; // 실패
} catch (Exception e) {
e.printStackTrace();
return -1; //에러
}
}
6. jsp파일에 코드 추가
<script src="https://www.google.com/recaptcha/api.js"></script>
<script>
$(function() {
$('#add_member_form').submit(function() {
var captcha = 1;
$.ajax({
url: '/pro/VerifyRecaptcha',
type: 'post',
data: {
recaptcha: $("#g-recaptcha-response").val()
},
success: function(data) {
switch (data) {
case 0:
console.log("자동 가입 방지 봇 통과");
captcha = 0;
break;
case 1:
alert("자동 가입 방지 봇을 확인 한뒤 진행 해 주세요.");
break;
default:
alert("자동 가입 방지 봇을 실행 하던 중 오류가 발생 했습니다. [Error bot Code : " + Number(data) + "]");
break;
}
}
});
if(captcha != 0) {
return false;
}
});
});
</script>
<body>
<div class="g-recaptcha" data-sitekey=자신의 공개키></div>
<button id = "join_button"type="submit">회원가입</button>
</body>
결과
recaptcha v3으로 하니까 안된다... 인식된 도메인이 아니라나 뭐래나...
v2로는 잘된다.
'웹 > Spring Framework' 카테고리의 다른 글
(Spring) XSS 필터 - jsoup (0) | 2020.01.16 |
---|---|
썸머노트(summernote) 사용하기(스프링, 404에러 해결), XSS관련 (4) | 2020.01.14 |
(Spring) kakao 소셜 로그인(SSO, oauth) (0) | 2020.01.10 |
프로젝트 import 후 tomcat에 add 안될 때 (0) | 2020.01.09 |
Junit (0) | 2020.01.08 |