SSM 로그 인 인증 코드 기능 구현(소스 코드 첨부)

프레임 워 크 로 인증 코드 를 실현 하려 면 제 다른 편 을 보 세 요.
Kaptcha 프레임 의 사용 은 매우 간단 합 니 다.신출내기 필수.
https://www.jb51.net/article/152260.htm
효과 도

구현 코드
첫 번 째 단계:우선 RandomValidate Code.java 를 도구 클래스 로 만 듭 니 다.아래 코드 를 직접 복사 해서 붙 여 넣 으 면 됩 니 다.

package com.utils;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class RandomValidateCode {
 public static final String RANDOMCODEKEY = "randomcode_key";//  session  key
 private Random random = new Random();
 private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//        
 private int width = 80;//   
 private int height = 26;//   
 private int lineSize = 40;//     
 private int stringNum = 4;//        
 /**
  *       
  */
 public void getRandcode(HttpServletRequest request,
   HttpServletResponse response) {
  HttpSession session = request.getSession();
  //BufferedImage        Image ,Image            
  BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
  //  Image   Graphics  ,                 
  Graphics g = image.getGraphics();
  g.fillRect(0, 0, width, height);
  g.setFont(new Font("Times New Roman",Font.ROMAN_BASELINE,18));
  g.setColor(getRandColor(160, 200));
  //     
  for(int i=0;i<=lineSize;i++){
   drowLine(g);
  }
  //      
  String randomString = "";
  for(int i=1;i<=stringNum;i++){
   randomString=drowString(g,randomString,i);
  }
  session.removeAttribute(RANDOMCODEKEY);
  session.setAttribute(RANDOMCODEKEY, randomString);
  g.dispose();
  try {
   //                   
   ImageIO.write(image, "JPEG", response.getOutputStream());
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 /*
  *     
  */
 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);
 }
 /*
  *      
  */
 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 클래스 에 전단 UI 를 쓰 는 인터페이스

 /**
 *            UI   
 * @param request
 * @param response
 * @throws ServletException
 * @throws IOException
 */
 @RequestMapping(value="/checkCode")
 public void checkCode(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
 //      ,             
  response.setContentType("image/jpeg");
  //       ,            
  response.setHeader("pragma", "no-cache");
  response.setHeader("Cache-Control", "no-cache");
  response.setDateHeader("Expire", 0);
  RandomValidateCode randomValidateCode = new RandomValidateCode();
  try {
   randomValidateCode.getRandcode(request, response);//      
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
세 번 째 단계:jsp 페이지 에서 인증 코드 가 져 오기

<img src="checkCode" alt="" width="100" height="32" class="passcode" style="height:43px;cursor:pointer;" onclick="this.src=this.src+'?'">
STEP 4:저 는 SSM 환경 에서 이 루어 졌 습 니 다.그렇지 않 으 면 스스로 고 쳐 쓸 수 있 습 니 다.
총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 SSM 로그 인 인증 코드 기능 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기