SpringBoot 전단 인증 코드 이미지 생 성 및 검증 실현
6924 단어 SpringBoot인증번호
1.효과
인증 코드 를 누 르 면 새로운 인증 코드 를 가 져 올 수 있 습 니 다.
2.원리
배경 에 인증 코드 그림 을 생 성하 여 그림 을 프론트 에 전달 합 니 다.
배경 은 session 에 인증 코드 내용 을 저장 합 니 다.
프론트 데스크 톱 에 인증 코드 를 입력 한 후 백 스테이지 로 전송 하여 세 션 에 저 장 된 인증 코드 를 꺼 내 검사 합 니 다.
인증 코드 의 명문 은 전단 으로 전송 할 수 없습니다.전단 내용 이 모두 투명 하고 안전 하지 않다.인증 코드 는 로봇 을 막 는 데 쓰 이 는 것 이지 사람 만 막 는 것 이 아니다.인증번호 명문 을 전단 으로 전달 하면 쉽게 풀 릴 수 있다.
3.그림 생 성
인증 코드 생 성 도구 클래스 RandomValidateCodeUtil
public class RandomValidateCodeUtil {
public static final String RANDOMCODEKEY= "RANDOMVALIDATECODEKEY";// session key
private String randString = "0123456789";// private String
//private String randString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//
//private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//
private int width = 95;//
private int height = 25;//
private int lineSize = 40;//
private int stringNum = 4;//
private static final Logger logger = LoggerFactory.getLogger(RandomValidateCodeUtil.class);
private Random random = new Random();
/**
*
*/
private Font getFont() {
return new Font("Fixedsys", Font.CENTER_BASELINE, 18);
}
/**
*
*/
private Color getRandColor(int fc, int bc) {
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc - 16);
int g = fc + random.nextInt(bc - fc - 14);
int b = fc + random.nextInt(bc - fc - 18);
return new Color(r, g, b);
}
/**
*
*/
public void getRandcode(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
// BufferedImage Image ,Image
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
Graphics g = image.getGraphics();// Image Graphics ,
g.fillRect(0, 0, width, height);//
g.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18));//
g.setColor(getRandColor(110, 133));//
//
for (int i = 0; i <= lineSize; i++) {
drowLine(g);
}
//
String randomString = "";
for (int i = 1; i <= stringNum; i++) {
randomString = drowString(g, randomString, i);
}
logger.info(randomString);
// session
session.removeAttribute(RANDOMCODEKEY);
session.setAttribute(RANDOMCODEKEY, randomString);
g.dispose();
try {
//
ImageIO.write(image, "JPEG", response.getOutputStream());
} catch (Exception e) {
logger.error(" >>>> ", e);
}
}
/**
*
*/
private String drowString(Graphics g, String randomString, int i) {
g.setFont(getFont());
g.setColor(new Color(random.nextInt(101), random.nextInt(111), random
.nextInt(121)));
String rand = String.valueOf(getRandomString(random.nextInt(randString
.length())));
randomString += rand;
g.translate(random.nextInt(3), random.nextInt(3));
g.drawString(rand, 13 * i, 16);
return randomString;
}
/**
*
*/
private void drowLine(Graphics g) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(13);
int yl = random.nextInt(15);
g.drawLine(x, y, x + xl, y + yl);
}
/**
*
*/
public String getRandomString(int num) {
return String.valueOf(randString.charAt(num));
}
}
Controller 에서 인증 코드 그림 생 성 방법 을 호출 하고 그림 을 전단 으로 전송 합 니 다.
/**
*
*/
@RequestMapping(value = "/getVerify")
public void getVerify(HttpServletRequest request, HttpServletResponse response) {
try {
response.setContentType("image/jpeg");// ,
response.setHeader("Pragma", "No-cache");// ,
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expire", 0);
RandomValidateCodeUtil randomValidateCode = new RandomValidateCodeUtil();
randomValidateCode.getRandcode(request, response);//
} catch (Exception e) {
logger.error(" >>>> ", e);
}
}
전단 인증 코드 이미지 가 져 오기html
<div class="row">
<div class="col-xs-6 pull_left">
<div class="form-group">
<input class="form-control" type="tel" id="verify_input" placeholder=" " maxlength="4">
</div>
</div>
<div class="col-xs-6 pull_left">
<a href="javascript:void(0);" rel="external nofollow" title=" ">
<img id="imgVerify" src="" alt=" " height="36" width="100%" onclick="getVerify(this);">
</a>
</div>
</div>
js
//
function getVerify(obj){
obj.src = httpurl + "/sys/getVerify?"+Math.random();
}
그림 을 클릭 할 때마다 인증 코드 를 다시 갱신 합 니 다.인터페이스 가 처음 불 러 올 때 getVerify()방법 을 호출 하면 됩 니 다.
4.인증번호 검증
전단 에서 사용자 가 입력 한 인증 코드 를 가 져 와 배경 으로 보 내 검증 합 니 다.
백그라운드 인증 코드
/**
*
*/
@RequestMapping(value = "/checkVerify", method = RequestMethod.POST, headers = "Accept=application/json")
public boolean checkVerify(@RequestBody Map<String, Object> requestMap, HttpSession session) {
try{
// session
String inputStr = requestMap.get("inputStr").toString();
String random = (String) session.getAttribute("RANDOMVALIDATECODEKEY");
if (random == null) {
return false;
}
if (random.equals(inputStr)) {
return true;
} else {
return false;
}
}catch (Exception e){
logger.error(" ", e);
return false;
}
}
배경 검증 후 전단 검증 결과 true 나 false 로 되 돌아 가면 됩 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.