JSP 인증 코드 제작 실례 상세 설명

6741 단어 JSP인증번호
JSP 인증 코드 제작 실례 상세 설명
인증번호
인증 코드(CAPTCHA)는'Complete Automated Public Turing test to tell Computers and Humans Apart'(컴퓨터 와 인간 을 자동 으로 구분 하 는 툴 링 테스트)의 약자 로,사용자 가 컴퓨터 인지 사람 인지 구분 하 는 공공 전자 동 프로그램 이다.방지 할 수 있 습 니 다.비밀 번 호 를 악의 적 으로 풀 고 표를 긁 으 며 포럼 에 물 을 주입 하 는 것 은 특정한 해커 가 특정한 등록 사용자 에 게 특정한 프로그램 폭력 으로 해결 하 는 방식 으로 끊 임 없 는 로그 인 시 도 를 하 는 것 을 효과적으로 방지 할 수 있 습 니 다.실제로 인증 코드 를 사용 하 는 것 은 현재 많은 사이트 에서 통용 되 는 방식 입 니 다.우 리 는 비교적 간단 하고 간단 한 방식 으로 이 기능 을 실현 합 니 다.이 문 제 는 컴퓨터 로 생 성 되 고 평가 할 수 있 지만 인간 만 이 풀 수 있어 야 한다.컴퓨터 가 CAPTCHA 의 질문 을 풀 수 없 기 때문에 질문 에 답 한 사용 자 는 인간 으로 볼 수 있다.
JSP 인증 코드 만 들 기
실행 환경:tomcat+eclipse+jdk
기본 사상:현재 Servlet 에 인증 코드 그림 을 그 려 서 페이지 에 표시 하고 js 방법 으로 인증 코드 를 새로 고 칠 수 있 습 니 다.ajax 로 사용자 가 입력 한 값 을 servlet 과 인증 코드 를 비교 하여 여 부 를 판단 하고 알림 사용자 에 게 부합 할 수 있 습 니 다.
기본 방법:
BufferedImage: 

Image      ,BufferedImage Image   。


Image BufferedImage                  。
Java               :
Java   
String imgPath = "d:/demo.jpg"; 
BufferedImage image = ImageIO.read(new FileInputStream(imgPath)); 
              ,  :       :image.getWidth(null);                      。


Graphics: 
Graphics 류 는 기본 적 인 기하학 적 도형 그리 기 방법 을 제공 합 니 다.주로 선분 그리 기,사각형 그리 기,원 그리 기,색깔 있 는 도형 그리 기,타원 그리 기,원호 그리 기,다각형 그리 기 등 이 있 습 니 다.그 내용 을 구체 적 으로 조작 하면 제 가 추천 합 니 다자바 의 Graphics 류 를 사용 하여 그림 을 그 리 는 방법 에 대한 상세 한 설명
인증 코드 구현
제 가 여기 서 만 든 인증 코드 는 중국 어 를 표시 하 는 것 입 니 다.servlet 에서 숫자 를 표시 할 지 알파벳 을 표시 할 지 결합 할 지 수정 할 수 있 습 니 다.배열 로 저장 할 수도 있 고 ASCII 코드 를 줄 의 무 작위 숫자 로 바 꿀 수도 있 습 니 다.개인 적 인 취향 을 볼 수도 있 습 니 다.
먼저 jsp 의 인증 코드 를 만 드 는 곳 입 니 다.

<div class="row cl">
    <div>
     <input type="text" placeholder="   " value="   :" onblur="testCheck(this.value);">
     <img id="pic" src="CheckTestServlet"> <a id="kanbuq" onClick="Checktest();">   ,   </a> </div>
 </div>
Servlet 을 만 들 고 있 습 니 다.CheckTestServlet.자바 라 고 합 니 다.

@WebServlet("/CheckTestServlet")
public class CheckTestServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
    
  
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          //            
          response.setCharacterEncoding("utf-8");
          //              BufferedImage(int width, int height, int imageType) 
         BufferedImage bImage=new BufferedImage(100, 30, BufferedImage.TYPE_3BYTE_BGR);
         //         
         Graphics g=bImage.getGraphics();
         //      
         g.setColor(Color.orange);
         //      ,  (0,0) ,  100,30
         g.fillRect(0, 0, 100, 30);
         //      
         Random r=new Random();
         int index;//     
         //          
         StringBuffer sBuffer=new StringBuffer();
         //       
         for (int i = 0; i < 4; i++) {
           //             4e00     19968,     9fa0    40869,              
           index=r.nextInt(40869-19968+1)+19968;//      
           //      ,
           g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));
           //       ,  
           g.setFont(new Font("", Font.BOLD, 20));
           /*  ,            Integer.toHexString(index),16)     (char)(Integer.parseInt,
                     
           */
           g.drawString((char)(Integer.parseInt(Integer.toHexString(index),16))+"", i*22+4, 18);
           //     StringBuffer ,         
           sBuffer.append((char)(Integer.parseInt(Integer.toHexString(index),16)));
        }
         //         session 
         request.getSession().setAttribute("piccode", sBuffer.toString());
         /*              
          * write(RenderedImage im, String formatName, OutputStream output)
        */         
         ImageIO.write(bImage, "jpg", response.getOutputStream());
  }

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
  }

js 인증 코드 를 새로 고 치 는 것 은 잘 보이 지 않 거나 다른 새로 고 치 는 데 사 용 됩 니 다.

 function Checktest(){
     var time=new Date().getTime();
    $("#pic").attr('src',"CheckTestServlet?d="+time)
  }
사용자 가 입력 한 알림 이 올 바 르 게 되 돌 아 왔 는 지 검증 하기 위해 Ajax 를 하나 더 쓰 십시오.이것 은 jQuery 로 만 든 것 입 니 다.js 를 인용 해 야 합 니 다.

function testCheck(num){
    $.ajax({
      type:"post",//    
      url:"TestCheckServlet",//    
      async:true,//      
      dataType:"html",//    
      data:{"num":num},//     
      success:function(data,textStatus){//       
        $("#checks").html(data)
      },
      error:function(){//       
        alert("error");
      }
    })
  } 
좀 귀 찮 은 데 Servlet 을 만들어 서 Ajax 가 보 낸 값 이 인증 코드 와 일치 하 는 지 확인 하 세 요.

@WebServlet("/TestCheckServlet")
public class TestCheckServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
  
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setCharacterEncoding("utf-8");
    PrintWriter out=response.getWriter();
    //                    ,      ,      ,
    if (request.getSession().getAttribute("piccode").toString().equals(request.getParameter("num"))) {
      out.println("     ");
    }else {
      out.println("     ");
    }
  }


  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
  }

}

이렇게 해서 인증 코드 는 이미 기본적으로 해결 되 었 고 그 중에서 수정 해 야 할 내용 도 많 습 니 다.무늬 는 수요 에 따라 이 루어 집 니 다.
 이상 은 바로 QR 코드 의 제작 입 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남기 거나 본 사이트 의 커 뮤 니 티 에 가서 토론 을 하 세 요.읽 어 주 셔 서 감사합니다. 도움 이 되 셨 으 면 좋 겠 습 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기