parent
8cd542cfaa
commit
1a1c6ec36f
@ -1,94 +1,94 @@
|
||||
package kr.xit.framework.core.utils.captcha;
|
||||
|
||||
import java.awt.*;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
import kr.xit.framework.support.captcha.SimpleCaptchaUtil;
|
||||
import nl.captcha.Captcha;
|
||||
import nl.captcha.audio.AudioCaptcha;
|
||||
import nl.captcha.backgrounds.GradiatedBackgroundProducer;
|
||||
import nl.captcha.servlet.CaptchaServletUtil;
|
||||
import nl.captcha.text.producer.NumbersAnswerProducer;
|
||||
import nl.captcha.text.renderer.DefaultWordRenderer;
|
||||
|
||||
@Controller
|
||||
public class XitCaptchaUtil {
|
||||
private Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
/**
|
||||
* <pre>메소드 설명: 캡차인증 이미지를 생성 한다.
|
||||
* -자동로그인 방지를 위해 특정문구가 입력된 캡차 이미지를 생성 한다.
|
||||
* -캡차 이미지에 입력된 문구는 요청 session의 attribute에 "captcha"란 이름으로 저장 된다.
|
||||
* </pre>
|
||||
* @param request
|
||||
* @param response void 요청처리 후 응답객체
|
||||
* @author: 박민규
|
||||
* @date: 2020. 9. 22.
|
||||
*/
|
||||
public static void getImage(HttpServletRequest request, HttpServletResponse response) {
|
||||
|
||||
/*폰트 및 컬러 설정*/
|
||||
List<Font> fontList = new ArrayList<Font>();
|
||||
fontList.add(new Font("", Font.HANGING_BASELINE, 40));
|
||||
fontList.add(new Font("Courier", Font.ITALIC, 40));
|
||||
fontList.add(new Font("", Font.PLAIN, 40));
|
||||
List<Color> colorList = new ArrayList<Color>();
|
||||
colorList.add(Color.BLACK);
|
||||
|
||||
//Captcha captcha = new Captcha.Builder(250, 50) //캡차 이미지 크기(가로,세로)
|
||||
Captcha captcha = new Captcha.Builder(250, 50) //캡차 이미지 크기(가로,세로)
|
||||
.addText(new NumbersAnswerProducer(6), new DefaultWordRenderer(colorList, fontList)) //이미지문구 생성(default: 5자리의 랜덤한 알파벳과 숫자 생성)
|
||||
// .addText(new NumbersAnswerProducer()) //이미지문구 생성(5자리의 랜덤한 숫자 생성)
|
||||
.addBackground(new GradiatedBackgroundProducer()) //바탕색 흰색 - Default
|
||||
.addNoise() //한번 호출할 떄마다 하나의 라인이 추가된다.
|
||||
.gimp() //Gradiated 백그라운드
|
||||
// .gimp(new DropShadowGimpyRenderer()) //그림자 효과 추가
|
||||
.addBorder() //검정 테두리 선 생성
|
||||
.build(); //필수 호출 함수
|
||||
/*
|
||||
|
||||
response.setHeader("Cache-Control", "no-store");
|
||||
response.setHeader("Pragma", "no-cache"); //브라우저 캐시 설정
|
||||
response.setDateHeader("Expires", 0);
|
||||
response.setContentType("image/jpeg"); //리턴 컨텐츠타입 설정
|
||||
|
||||
Capchas.net
|
||||
JCAPCHA
|
||||
*/
|
||||
|
||||
//image 생성
|
||||
CaptchaServletUtil.writeImage(response, captcha.getImage());
|
||||
//image 문자
|
||||
// String captchaImgStr = captcha.getAnswer();
|
||||
|
||||
//요청세션에 저장
|
||||
request.getSession().setAttribute("captcha", captcha);
|
||||
}
|
||||
|
||||
public void getAudioCaptCha(HttpServletRequest req, HttpServletResponse res, String answer) throws IOException {
|
||||
HttpSession session = req.getSession();
|
||||
|
||||
Captcha captcha = (Captcha) session.getAttribute(Captcha.NAME);
|
||||
String getAnswer = answer;
|
||||
|
||||
if(getAnswer == null || getAnswer.equals("")) getAnswer = captcha.getAnswer();
|
||||
|
||||
AudioCaptcha audiocaptcha = new AudioCaptcha.Builder()
|
||||
.addAnswer(new SimpleCaptchaUtil.SetTextProducer(getAnswer))
|
||||
.addNoise() /*잡음 추가*/
|
||||
.build();
|
||||
|
||||
CaptchaServletUtil.writeAudio(res, audiocaptcha.getChallenge());
|
||||
}
|
||||
|
||||
}
|
||||
// package kr.xit.framework.core.utils.captcha;
|
||||
//
|
||||
// import java.awt.*;
|
||||
// import java.io.IOException;
|
||||
// import java.util.ArrayList;
|
||||
// import java.util.List;
|
||||
//
|
||||
// import javax.servlet.http.HttpServletRequest;
|
||||
// import javax.servlet.http.HttpServletResponse;
|
||||
// import javax.servlet.http.HttpSession;
|
||||
//
|
||||
// import org.slf4j.Logger;
|
||||
// import org.slf4j.LoggerFactory;
|
||||
// import org.springframework.stereotype.Controller;
|
||||
//
|
||||
// import kr.xit.framework.support.captcha.SimpleCaptchaUtil;
|
||||
// import nl.captcha.Captcha;
|
||||
// import nl.captcha.audio.AudioCaptcha;
|
||||
// import nl.captcha.backgrounds.GradiatedBackgroundProducer;
|
||||
// import nl.captcha.servlet.CaptchaServletUtil;
|
||||
// import nl.captcha.text.producer.NumbersAnswerProducer;
|
||||
// import nl.captcha.text.renderer.DefaultWordRenderer;
|
||||
//
|
||||
// @Controller
|
||||
// public class XitCaptchaUtil {
|
||||
// private Logger logger = LoggerFactory.getLogger(getClass());
|
||||
//
|
||||
// /**
|
||||
// * <pre>메소드 설명: 캡차인증 이미지를 생성 한다.
|
||||
// * -자동로그인 방지를 위해 특정문구가 입력된 캡차 이미지를 생성 한다.
|
||||
// * -캡차 이미지에 입력된 문구는 요청 session의 attribute에 "captcha"란 이름으로 저장 된다.
|
||||
// * </pre>
|
||||
// * @param request
|
||||
// * @param response void 요청처리 후 응답객체
|
||||
// * @author: 박민규
|
||||
// * @date: 2020. 9. 22.
|
||||
// */
|
||||
// public static void getImage(HttpServletRequest request, HttpServletResponse response) {
|
||||
//
|
||||
// /*폰트 및 컬러 설정*/
|
||||
// List<Font> fontList = new ArrayList<Font>();
|
||||
// fontList.add(new Font("", Font.HANGING_BASELINE, 40));
|
||||
// fontList.add(new Font("Courier", Font.ITALIC, 40));
|
||||
// fontList.add(new Font("", Font.PLAIN, 40));
|
||||
// List<Color> colorList = new ArrayList<Color>();
|
||||
// colorList.add(Color.BLACK);
|
||||
//
|
||||
// //Captcha captcha = new Captcha.Builder(250, 50) //캡차 이미지 크기(가로,세로)
|
||||
// Captcha captcha = new Captcha.Builder(250, 50) //캡차 이미지 크기(가로,세로)
|
||||
// .addText(new NumbersAnswerProducer(6), new DefaultWordRenderer(colorList, fontList)) //이미지문구 생성(default: 5자리의 랜덤한 알파벳과 숫자 생성)
|
||||
// // .addText(new NumbersAnswerProducer()) //이미지문구 생성(5자리의 랜덤한 숫자 생성)
|
||||
// .addBackground(new GradiatedBackgroundProducer()) //바탕색 흰색 - Default
|
||||
// .addNoise() //한번 호출할 떄마다 하나의 라인이 추가된다.
|
||||
// .gimp() //Gradiated 백그라운드
|
||||
// // .gimp(new DropShadowGimpyRenderer()) //그림자 효과 추가
|
||||
// .addBorder() //검정 테두리 선 생성
|
||||
// .build(); //필수 호출 함수
|
||||
// /*
|
||||
//
|
||||
// response.setHeader("Cache-Control", "no-store");
|
||||
// response.setHeader("Pragma", "no-cache"); //브라우저 캐시 설정
|
||||
// response.setDateHeader("Expires", 0);
|
||||
// response.setContentType("image/jpeg"); //리턴 컨텐츠타입 설정
|
||||
//
|
||||
// Capchas.net
|
||||
// JCAPCHA
|
||||
// */
|
||||
//
|
||||
// //image 생성
|
||||
// CaptchaServletUtil.writeImage(response, captcha.getImage());
|
||||
// //image 문자
|
||||
// // String captchaImgStr = captcha.getAnswer();
|
||||
//
|
||||
// //요청세션에 저장
|
||||
// request.getSession().setAttribute("captcha", captcha);
|
||||
// }
|
||||
//
|
||||
// public void getAudioCaptCha(HttpServletRequest req, HttpServletResponse res, String answer) throws IOException {
|
||||
// HttpSession session = req.getSession();
|
||||
//
|
||||
// Captcha captcha = (Captcha) session.getAttribute(Captcha.NAME);
|
||||
// String getAnswer = answer;
|
||||
//
|
||||
// if(getAnswer == null || getAnswer.equals("")) getAnswer = captcha.getAnswer();
|
||||
//
|
||||
// AudioCaptcha audiocaptcha = new AudioCaptcha.Builder()
|
||||
// .addAnswer(new SimpleCaptchaUtil.SetTextProducer(getAnswer))
|
||||
// .addNoise() /*잡음 추가*/
|
||||
// .build();
|
||||
//
|
||||
// CaptchaServletUtil.writeAudio(res, audiocaptcha.getChallenge());
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
@ -1,229 +1,229 @@
|
||||
package kr.xit.framework.support.captcha;
|
||||
|
||||
import kr.xit.framework.support.util.Checks;
|
||||
import nl.captcha.Captcha;
|
||||
import nl.captcha.audio.AudioCaptcha;
|
||||
import nl.captcha.backgrounds.GradiatedBackgroundProducer;
|
||||
import nl.captcha.servlet.CaptchaServletUtil;
|
||||
import nl.captcha.text.producer.TextProducer;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.awt.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author Lim, Jong Uk (minuk926)
|
||||
* @since 2021-11-30
|
||||
*/
|
||||
public class SimpleCaptchaUtil {
|
||||
|
||||
private static final int WIDTH = 100;
|
||||
private static final int HEIGHT = 30;
|
||||
private static final int FONT_SIZE = 20;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param req
|
||||
* @param res
|
||||
*/
|
||||
public static void getImgCaptcha(final HttpServletRequest req, final HttpServletResponse res) {
|
||||
int width = Objects.isNull(req.getParameter("width"))? WIDTH : Integer.parseInt(req.getParameter("width"));
|
||||
int height = Objects.isNull(req.getParameter("height"))? HEIGHT : Integer.parseInt(req.getParameter("height"));
|
||||
|
||||
List<Font> fonts = Arrays.asList(
|
||||
new Font("", Font.HANGING_BASELINE, FONT_SIZE),
|
||||
new Font("Courier", Font.ITALIC, FONT_SIZE),
|
||||
new Font("", Font.PLAIN, FONT_SIZE)
|
||||
);
|
||||
List<Color> colors = Collections.singletonList(Color.BLACK);
|
||||
|
||||
Captcha captcha =
|
||||
new Captcha.Builder(150, 50)
|
||||
.addText()
|
||||
//new Captcha.Builder(width, height)
|
||||
//.addText(new NumbersAnswerProducer(5), new DefaultWordRenderer(colors, fonts))
|
||||
// 호출될때마다 라인 추가
|
||||
.addNoise()
|
||||
.gimp()
|
||||
// black border 생성
|
||||
.addBorder()
|
||||
.addBackground(new GradiatedBackgroundProducer())
|
||||
.build();
|
||||
/*
|
||||
res.setHeader("Cache-Control", "no-cache");
|
||||
res.setDateHeader("Expires", 0);
|
||||
res.setHeader("Pragma", "no-cache");
|
||||
res.setDateHeader("Max-Age", 0);
|
||||
res.setContentType("image/png");
|
||||
*/
|
||||
CaptchaServletUtil.writeImage(res, captcha.getImage());
|
||||
req.getSession().setAttribute(Captcha.NAME, captcha);
|
||||
//req.getSession().setAttribute("captcha", captcha.getAnswer());// 값 저장
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param req
|
||||
* @param res
|
||||
* @param answer
|
||||
*/
|
||||
public static void getAudioCaptcha(final HttpServletRequest req, final HttpServletResponse res, String answer) {
|
||||
|
||||
if(Checks.isEmpty(answer)){
|
||||
Captcha captcha = (Captcha) req.getSession().getAttribute(Captcha.NAME);
|
||||
answer = captcha.getAnswer();
|
||||
}
|
||||
|
||||
AudioCaptcha audioCaptcha = new AudioCaptcha.Builder()
|
||||
.addAnswer(new SetTextProducer(answer))
|
||||
.addNoise()
|
||||
.build();
|
||||
|
||||
CaptchaServletUtil.writeAudio(res, audioCaptcha.getChallenge());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param req
|
||||
* @param res
|
||||
* @param ans
|
||||
* @return
|
||||
*/
|
||||
public static boolean isCorrect(final HttpServletRequest req, final HttpServletResponse res, String ans) {
|
||||
|
||||
if(Checks.isEmpty(ans)) return false;
|
||||
|
||||
Captcha captcha = (Captcha) req.getSession().getAttribute(Captcha.NAME);
|
||||
if(captcha != null && captcha.isCorrect(ans)){
|
||||
req.getSession().removeAttribute(Captcha.NAME);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
/*
|
||||
String answer = (String)req.getSession().getAttribute("captcha");
|
||||
if(Objects.equals(ans, answer)) {
|
||||
req.getSession().removeAttribute("captcha");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
public static class SetTextProducer implements TextProducer {
|
||||
private final String str;
|
||||
|
||||
public SetTextProducer(String answer){
|
||||
this.str = answer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(){
|
||||
return this.str;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
@RequestMapping(method = RequestMethod.GET, value = "/captcha/image")
|
||||
public void getCaptchaImage(final HttpServletRequest req, final HttpServletResponse res) {
|
||||
SimpleCaptchaUtil
|
||||
.getImgCaptcha(req, res);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@RequestMapping(method = RequestMethod.GET, value = "/captcha/audio")
|
||||
public void getCaptchaAudio(final HttpServletRequest req, final HttpServletResponse res) {
|
||||
SimpleCaptchaUtil.getAudioCaptcha(req, res, null);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@RequestMapping(method = RequestMethod.POST, value = "/captcha/check")
|
||||
@ResponseBody
|
||||
public String isCorrect(final HttpServletRequest req, final HttpServletResponse res, String answer) {
|
||||
//modelMap.addAttribute("OK", new SimpleCaptchaUtil().isCorrect(req, res, req.getParameter("answer")));
|
||||
|
||||
Gson gson = new GsonBuilder().create();
|
||||
return gson.toJson(SimpleCaptchaUtil.isCorrect(req, res, req.getParameter("answer")));
|
||||
}
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
<th scope="row"><span class="ico_point"><span class="hide">필수입력</span>*</span><label for="captcha">자동입력방지</label></th>
|
||||
<td>
|
||||
<img id="captchaImg" src="${wwwHost}/support/captcha/image" alt="보안문자를 입력해 주세요.">
|
||||
<div id="ccaudio" style="display:none"></div>
|
||||
<input type="button" ng-click="mainCtrl.captchaReload()" id="reLoad" value="새로고침">
|
||||
<input type="button" ng-click="mainCtrl.audio()" id="soundOn" value="음성듣기">
|
||||
<input type="text" name="" id="captchaAns" class="" placeholder="보안문자 입력">
|
||||
<input type="button" ng-click="mainCtrl.captchaConfirm()" id="captchaConfirm" value="확인">
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
this.captchaReload = function(){
|
||||
const rand = Math.random();
|
||||
const url = '${wwwHost}/support/captcha/image?rand='+rand;
|
||||
document.querySelector('#captchaImg').setAttribute('src', url);
|
||||
|
||||
}
|
||||
|
||||
this.audio = function(){
|
||||
const rand = Math.random();
|
||||
const uAgent = navigator.userAgent;
|
||||
|
||||
const url = '${wwwHost}/support/captcha/audio?rand='+rand;
|
||||
|
||||
// IE
|
||||
if(uAgent.indexOf('Trident') > -1 || uAgent.indexOf('MISE') > -1){
|
||||
document.querySelector('#ccaudio').innerHTML = '<bgsoun src="' + url + '">';
|
||||
|
||||
// Chrome
|
||||
}else if(!!document.createElement('audio').canPlayType){
|
||||
try{
|
||||
new Audio(url).play()
|
||||
}catch (e){
|
||||
document.querySelector('#ccaudio').innerHTML = '<bgsoun src="' + url + '">';
|
||||
}
|
||||
}else{
|
||||
window.open(url, '', 'width=1,height=1');
|
||||
}
|
||||
}
|
||||
this.captchaConfirm = function(){
|
||||
const ans = document.querySelector('#captchaAns').value;
|
||||
if(!ans){
|
||||
alert("보안문자를 입력해 주세요.");
|
||||
return true;
|
||||
}
|
||||
|
||||
$http({
|
||||
method: 'POST',
|
||||
url: '${wwwHost}/support/captcha/check',
|
||||
data: {answer: ans}
|
||||
}).success(function (data, status, headers, config) {
|
||||
if(data){
|
||||
|
||||
}else{
|
||||
alert('보안문자가 일치하지 않습니다.\n다시 입력해 주세요');
|
||||
captchaReload();
|
||||
}
|
||||
|
||||
}).error(function (data, status, headers, config) {
|
||||
alert(data.message);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
// package kr.xit.framework.support.captcha;
|
||||
//
|
||||
// import kr.xit.framework.support.util.Checks;
|
||||
// import nl.captcha.Captcha;
|
||||
// import nl.captcha.audio.AudioCaptcha;
|
||||
// import nl.captcha.backgrounds.GradiatedBackgroundProducer;
|
||||
// import nl.captcha.servlet.CaptchaServletUtil;
|
||||
// import nl.captcha.text.producer.TextProducer;
|
||||
//
|
||||
// import javax.servlet.http.HttpServletRequest;
|
||||
// import javax.servlet.http.HttpServletResponse;
|
||||
// import java.awt.*;
|
||||
// import java.util.Arrays;
|
||||
// import java.util.Collections;
|
||||
// import java.util.List;
|
||||
// import java.util.Objects;
|
||||
//
|
||||
// /**
|
||||
// * @author Lim, Jong Uk (minuk926)
|
||||
// * @since 2021-11-30
|
||||
// */
|
||||
// public class SimpleCaptchaUtil {
|
||||
//
|
||||
// private static final int WIDTH = 100;
|
||||
// private static final int HEIGHT = 30;
|
||||
// private static final int FONT_SIZE = 20;
|
||||
//
|
||||
//
|
||||
// /**
|
||||
// *
|
||||
// * @param req
|
||||
// * @param res
|
||||
// */
|
||||
// public static void getImgCaptcha(final HttpServletRequest req, final HttpServletResponse res) {
|
||||
// int width = Objects.isNull(req.getParameter("width"))? WIDTH : Integer.parseInt(req.getParameter("width"));
|
||||
// int height = Objects.isNull(req.getParameter("height"))? HEIGHT : Integer.parseInt(req.getParameter("height"));
|
||||
//
|
||||
// List<Font> fonts = Arrays.asList(
|
||||
// new Font("", Font.HANGING_BASELINE, FONT_SIZE),
|
||||
// new Font("Courier", Font.ITALIC, FONT_SIZE),
|
||||
// new Font("", Font.PLAIN, FONT_SIZE)
|
||||
// );
|
||||
// List<Color> colors = Collections.singletonList(Color.BLACK);
|
||||
//
|
||||
// Captcha captcha =
|
||||
// new Captcha.Builder(150, 50)
|
||||
// .addText()
|
||||
// //new Captcha.Builder(width, height)
|
||||
// //.addText(new NumbersAnswerProducer(5), new DefaultWordRenderer(colors, fonts))
|
||||
// // 호출될때마다 라인 추가
|
||||
// .addNoise()
|
||||
// .gimp()
|
||||
// // black border 생성
|
||||
// .addBorder()
|
||||
// .addBackground(new GradiatedBackgroundProducer())
|
||||
// .build();
|
||||
// /*
|
||||
// res.setHeader("Cache-Control", "no-cache");
|
||||
// res.setDateHeader("Expires", 0);
|
||||
// res.setHeader("Pragma", "no-cache");
|
||||
// res.setDateHeader("Max-Age", 0);
|
||||
// res.setContentType("image/png");
|
||||
// */
|
||||
// CaptchaServletUtil.writeImage(res, captcha.getImage());
|
||||
// req.getSession().setAttribute(Captcha.NAME, captcha);
|
||||
// //req.getSession().setAttribute("captcha", captcha.getAnswer());// 값 저장
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// *
|
||||
// * @param req
|
||||
// * @param res
|
||||
// * @param answer
|
||||
// */
|
||||
// public static void getAudioCaptcha(final HttpServletRequest req, final HttpServletResponse res, String answer) {
|
||||
//
|
||||
// if(Checks.isEmpty(answer)){
|
||||
// Captcha captcha = (Captcha) req.getSession().getAttribute(Captcha.NAME);
|
||||
// answer = captcha.getAnswer();
|
||||
// }
|
||||
//
|
||||
// AudioCaptcha audioCaptcha = new AudioCaptcha.Builder()
|
||||
// .addAnswer(new SetTextProducer(answer))
|
||||
// .addNoise()
|
||||
// .build();
|
||||
//
|
||||
// CaptchaServletUtil.writeAudio(res, audioCaptcha.getChallenge());
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// *
|
||||
// * @param req
|
||||
// * @param res
|
||||
// * @param ans
|
||||
// * @return
|
||||
// */
|
||||
// public static boolean isCorrect(final HttpServletRequest req, final HttpServletResponse res, String ans) {
|
||||
//
|
||||
// if(Checks.isEmpty(ans)) return false;
|
||||
//
|
||||
// Captcha captcha = (Captcha) req.getSession().getAttribute(Captcha.NAME);
|
||||
// if(captcha != null && captcha.isCorrect(ans)){
|
||||
// req.getSession().removeAttribute(Captcha.NAME);
|
||||
// return true;
|
||||
// }
|
||||
// return false;
|
||||
// /*
|
||||
// String answer = (String)req.getSession().getAttribute("captcha");
|
||||
// if(Objects.equals(ans, answer)) {
|
||||
// req.getSession().removeAttribute("captcha");
|
||||
// return true;
|
||||
// }
|
||||
// return false;
|
||||
// */
|
||||
//
|
||||
// }
|
||||
//
|
||||
// public static class SetTextProducer implements TextProducer {
|
||||
// private final String str;
|
||||
//
|
||||
// public SetTextProducer(String answer){
|
||||
// this.str = answer;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String getText(){
|
||||
// return this.str;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//
|
||||
// /*
|
||||
//
|
||||
//
|
||||
// @RequestMapping(method = RequestMethod.GET, value = "/captcha/image")
|
||||
// public void getCaptchaImage(final HttpServletRequest req, final HttpServletResponse res) {
|
||||
// SimpleCaptchaUtil
|
||||
// .getImgCaptcha(req, res);
|
||||
//
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @RequestMapping(method = RequestMethod.GET, value = "/captcha/audio")
|
||||
// public void getCaptchaAudio(final HttpServletRequest req, final HttpServletResponse res) {
|
||||
// SimpleCaptchaUtil.getAudioCaptcha(req, res, null);
|
||||
//
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @RequestMapping(method = RequestMethod.POST, value = "/captcha/check")
|
||||
// @ResponseBody
|
||||
// public String isCorrect(final HttpServletRequest req, final HttpServletResponse res, String answer) {
|
||||
// //modelMap.addAttribute("OK", new SimpleCaptchaUtil().isCorrect(req, res, req.getParameter("answer")));
|
||||
//
|
||||
// Gson gson = new GsonBuilder().create();
|
||||
// return gson.toJson(SimpleCaptchaUtil.isCorrect(req, res, req.getParameter("answer")));
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
// <tr>
|
||||
// <th scope="row"><span class="ico_point"><span class="hide">필수입력</span>*</span><label for="captcha">자동입력방지</label></th>
|
||||
// <td>
|
||||
// <img id="captchaImg" src="${wwwHost}/support/captcha/image" alt="보안문자를 입력해 주세요.">
|
||||
// <div id="ccaudio" style="display:none"></div>
|
||||
// <input type="button" ng-click="mainCtrl.captchaReload()" id="reLoad" value="새로고침">
|
||||
// <input type="button" ng-click="mainCtrl.audio()" id="soundOn" value="음성듣기">
|
||||
// <input type="text" name="" id="captchaAns" class="" placeholder="보안문자 입력">
|
||||
// <input type="button" ng-click="mainCtrl.captchaConfirm()" id="captchaConfirm" value="확인">
|
||||
// </td>
|
||||
// </tr>
|
||||
//
|
||||
//
|
||||
//
|
||||
// this.captchaReload = function(){
|
||||
// const rand = Math.random();
|
||||
// const url = '${wwwHost}/support/captcha/image?rand='+rand;
|
||||
// document.querySelector('#captchaImg').setAttribute('src', url);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// this.audio = function(){
|
||||
// const rand = Math.random();
|
||||
// const uAgent = navigator.userAgent;
|
||||
//
|
||||
// const url = '${wwwHost}/support/captcha/audio?rand='+rand;
|
||||
//
|
||||
// // IE
|
||||
// if(uAgent.indexOf('Trident') > -1 || uAgent.indexOf('MISE') > -1){
|
||||
// document.querySelector('#ccaudio').innerHTML = '<bgsoun src="' + url + '">';
|
||||
//
|
||||
// // Chrome
|
||||
// }else if(!!document.createElement('audio').canPlayType){
|
||||
// try{
|
||||
// new Audio(url).play()
|
||||
// }catch (e){
|
||||
// document.querySelector('#ccaudio').innerHTML = '<bgsoun src="' + url + '">';
|
||||
// }
|
||||
// }else{
|
||||
// window.open(url, '', 'width=1,height=1');
|
||||
// }
|
||||
// }
|
||||
// this.captchaConfirm = function(){
|
||||
// const ans = document.querySelector('#captchaAns').value;
|
||||
// if(!ans){
|
||||
// alert("보안문자를 입력해 주세요.");
|
||||
// return true;
|
||||
// }
|
||||
//
|
||||
// $http({
|
||||
// method: 'POST',
|
||||
// url: '${wwwHost}/support/captcha/check',
|
||||
// data: {answer: ans}
|
||||
// }).success(function (data, status, headers, config) {
|
||||
// if(data){
|
||||
//
|
||||
// }else{
|
||||
// alert('보안문자가 일치하지 않습니다.\n다시 입력해 주세요');
|
||||
// captchaReload();
|
||||
// }
|
||||
//
|
||||
// }).error(function (data, status, headers, config) {
|
||||
// alert(data.message);
|
||||
// });
|
||||
//
|
||||
// }
|
||||
//
|
||||
// */
|
||||
|
Loading…
Reference in New Issue