자바 백 엔 드 에서 인증 코드 백 엔 드 인증 기능 의 실현 코드 생 성

severlet 을 직접 뛰 어 넘 어 자바 배경 에서 인증 코드 를 생 성 합 니 다:

@RequestMapping(value="yzm.action")
 public void Yzm(HttpSession session,HttpServletResponse resp){
 //         。   
   int width = 60;   
    //         。   
   int height = 20;   
   
   //           
   int codeCount = 4;   
   
   int x = 0;   
   
   //        
   int fontHeight;   
   
   int codeY;   
   
   char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',   
       'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',   
       'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };   
   x = width / (codeCount + 1);   
    fontHeight = height - 2;   
    codeY = height - 4; 
    BufferedImage buffImg = new BufferedImage(width, height,   
        BufferedImage.TYPE_INT_RGB);   
    Graphics2D g = buffImg.createGraphics();   
    //               
    Random random = new Random();   
    //            
    g.setColor(Color.WHITE);   
    g.fillRect(0, 0, width, height);   
    //     ,                。   
    Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);   
    //     。   
    g.setFont(font);   
    //    。   
//    g.setColor(Color.BLACK);   
//    g.drawRect(0, 0, width - 1, height - 1);   
    //     160    ,                  。   
    g.setColor(Color.BLACK);   
    for (int i = 0; i < 1; i++) {   
      int x2 = random.nextInt(width);   
      int y2 = random.nextInt(height);   
      int xl = random.nextInt(12);   
      int yl = random.nextInt(12);   
      g.drawLine(x2, y2, x + xl, y2 + yl);   
    }   
    // randomCode            ,           。   
    StringBuffer randomCode = new StringBuffer();
 
    int red = 0, green = 0, blue = 0;   
    //     codeCount      。   
    for (int i = 0; i < codeCount; i++) {   
      //             。   
      String strRand = String.valueOf(codeSequence[random.nextInt(36)]);   
      //                ,                 。   
      red = random.nextInt(255);   
      green = random.nextInt(255);   
      blue = random.nextInt(255);   
      //                   。   
      g.setColor(new Color(red, green, blue));   
      g.drawString(strRand, (i + 1) * x, codeY);   
      //               。   
      randomCode.append(strRand);   
    }   
    //             Session 。   
    session.setAttribute("validateCode", randomCode.toString());   
    ServletOutputStream sos;
 try {
  sos = resp.getOutputStream();
  ImageIO.write(buffImg, "jpeg", sos);   
  sos.close();   
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }   
 }
jsp 페이지 코드 표시,그림 새로 고침 클릭

<td><img id="img" src="yzm.action"/>${validateCode}</td>
      <td><input type="text" name="yzma"/><br/></td>
 $("#img").click(function(){
 $(this).attr("src","yzm.action?"+new Date().getTime());
  });
텍스트 상자 의 값 을 배경 으로 전송 하고 인증 코드 를 처음 생 성 한 임 의 수 와 비교 하면 인증 이 완 료 됩 니 다.

페이지 에서 받 은 session 의 값 은 인증 코드 보다 한 걸음 늦 기 때문에 배경 으로 검증 합 니 다.여 긴 나 도 무슨 영문 인지 모 르 겠 어.동료 들 에 게 알려 줘...
다른 사고방식,백 엔 드 생 성 랜 덤 수,전단 생 성 캔버스,aax 로 랜 덤 수

//        
 @RequestMapping(value="random.action")
 public void findRandom (HttpServletResponse response) throws IOException{
  //           
   int codeCount = 4;
   char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',   
       'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',   
       'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
   
   //               
     Random random = new Random();
   // randomCode            ,           。   
     StringBuffer randomCode = new StringBuffer();
     for (int i = 0; i < codeCount; i++) {   
       //             。   
       String strRand = String.valueOf(codeSequence[random.nextInt(36)]); 
       //               。   
       randomCode.append(strRand);   
     }
     PrintWriter out = response.getWriter();
     out.print(randomCode);
 }
 jsp,jq,js 코드

<body>
    <canvas id="canvas" width="70" height="34"></canvas>
    <a href="javascript:;" rel="external nofollow" id="img" class="pull-right" style="line-height: 34px;text-indent: 10px;">   </a>
    <input type="text" class="form-control" id="yzms" name="yzms" readonly = "readonly" style="display:none" >
 </body>
 <script type="text/javascript">
    $.ajax({
 url:"random.action",
 success:function(k){
 console.log(k)
  $("#yzms").attr("value",k);
  drawPic();
 }
})
 $("#img").on("click",function(){
 var _this=$(this)
  $.ajax({
  url:"random.action",
  success:function(k){
  console.log(k)
   $("#yzms").attr("value",k);
   drawPic();
  }
 })
 }) 
 /**       **/
 function randomNum(min,max){
  return Math.floor( Math.random()*(max-min)+min);
 }
 /**       **/
 function randomColor(min,max){
  var r = randomNum(min,max);
  var g = randomNum(min,max);
  var b = randomNum(min,max);
  return "rgb("+r+","+g+","+b+")";
 }
  
 
 /**       **/
 function drawPic(){
  var canvas=document.getElementById("canvas");
  var width=canvas.width;
  var height=canvas.height;
  var ctx = canvas.getContext('2d');
  ctx.textBaseline = 'bottom';
  /**     **/
  ctx.fillStyle = randomColor(180,240); //            
  ctx.fillRect(0,0,width,height);
  /**    **/
 /*  for(var i=0; i<4; i++){ */
   var txt = $("#yzms").attr("value");
   ctx.fillStyle = randomColor(50,160); //        
   ctx.font = randomNum(15,20)+'px SimHei'; //        
   var x = 20;
   var y = randomNum(20,30);
   var deg = randomNum(-45, 45);
   //           
   ctx.translate(x,y);
   ctx.rotate(deg*Math.PI/180);
   ctx.fillText(txt, 0,0);
   //           
   ctx.rotate(-deg*Math.PI/180);
   ctx.translate(-x,-y);
 /*  } */
  /* /**     **/
   for(var i=0; i<8; i++){
   ctx.strokeStyle = randomColor(40,180);
   ctx.beginPath();
   ctx.moveTo( randomNum(0,width), randomNum(0,height) );
   ctx.lineTo( randomNum(0,width), randomNum(0,height) );
   ctx.stroke();
  } 
  /**     **/
  /* for(var i=0; i<100; i++){
   ctx.fillStyle = randomColor(0,255);
   ctx.beginPath();
   ctx.arc(randomNum(0,width),randomNum(0,height), 1, 0, 2*Math.PI);
   ctx.fill();
  } */
 }
효과 표시:

총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 자바 백 엔 드 에 인증 코드 백 엔 드 인증 기능 을 생 성 하 는 실현 코드 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

좋은 웹페이지 즐겨찾기