2013-02-11 112 views
8

मैं नेटबीन्स और माइस्क्ल का उपयोग कर जावा में एक वेब अनुप्रयोग विकसित कर रहा हूं। आवेदन में एक पंजीकरण फार्म है। जब उपयोगकर्ता फॉर्म सबमिट करता है, तो क्लाइंट और सर्वर साइड सत्यापन किया जाता है।एक जेएसपी रूप में कैप्चा कैसे सम्मिलित करें?

अब मैं फॉर्म में एक कैप्चा डालना चाहता हूं। मैं इसे कैसे सम्मिलित करूं, और यह जांचने के लिए कि उस उपयोगकर्ता ने सही कैप्चा मान दर्ज किया है?

+1

धन्यवाद बहुत यह वास्तव में मददगार –

+1

[जावा में कॅप्चा] के संभावित डुप्लिकेट है (http://stackoverflow.com/questions/3326778/captcha-in-java) – Raedwald

उत्तर

0

यहां आप नमूना कोड के साथ जाते हैं। आशा करता हूँ की ये काम करेगा।

http://captchas.net/sample/jsp/

4

आपका कैप्चा कोड एक सर्वलेट का doGet (...) विधि के अंदर किसी भी बदलाव के बिना काम करता है।

package test.captcha; 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.util.Random; 
import javax.imageio.ImageIO; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

public class CaptchaServlet extends HttpServlet { 

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 


    response.setContentType("image/jpg"); 
    /* 
    * Define number characters contains the captcha image, declare global 
    */ 
    int iTotalChars = 6; 

    /* 
    * Size image iHeight and iWidth, declare globl 
    */ 
    int iHeight = 40; 
    int iWidth = 150; 

    /* 
    * font style 
    */ 
    Font fntStyle1 = new Font("Arial", Font.BOLD, 30); 
    Font fntStyle2 = new Font("Verdana", Font.BOLD, 20); 

    /* 
    * Possible random characters in the image 
    */ 
    Random randChars = new Random(); 
    String sImageCode = (Long.toString(Math.abs(randChars.nextLong()), 36)).substring(0, iTotalChars); 

    /* 
    * BufferedImage is used to create a create new image 
    */ 
    /* 
    * TYPE_INT_RGB - does not support transpatency, TYPE_INT_ARGB - support transpatency 
    */ 
    BufferedImage biImage = new BufferedImage(iWidth, iHeight, BufferedImage.TYPE_INT_RGB); 
    Graphics2D g2dImage = (Graphics2D) biImage.getGraphics(); 

    // Draw background rectangle and noisey filled round rectangles 
    int iCircle = 15; 
    //g2dImage.fillRect(0, 0, iWidth, iHeight); 
    for (int i = 0; i < iCircle; i++) { 
     g2dImage.setColor(new Color(randChars.nextInt(255), randChars.nextInt(255), randChars.nextInt(255))); 
     int iRadius = (int) (Math.random() * iHeight/2.0); 
     int iX = (int) (Math.random() * iWidth - iRadius); 
     int iY = (int) (Math.random() * iHeight - iRadius); 
     //g2dImage.fillRoundRect(iX, iY, iRadius * 2, iRadius * 2,100,100); 
    } 
    g2dImage.setFont(fntStyle1); 
    for (int i = 0; i < iTotalChars; i++) { 
     g2dImage.setColor(new Color(randChars.nextInt(255), randChars.nextInt(255), randChars.nextInt(255))); 
     if (i % 2 == 0) { 
      g2dImage.drawString(sImageCode.substring(i, i + 1), 25 * i, 24); 
     } else { 
      g2dImage.drawString(sImageCode.substring(i, i + 1), 25 * i, 35); 
     } 
    } 

    /* 
    * create jpeg image and display on the screen 
    */ 
    OutputStream osImage = response.getOutputStream(); 
    ImageIO.write(biImage, "jpeg", osImage); 
    //osImage.close(); 

    /* 
    * Dispose function is used destory an image object 
    */ 
    g2dImage.dispose(); 

    HttpSession session = request.getSession(); 
    session.setAttribute("dns_security_code", sImageCode); 
    //System.out.println("Captcha Page :"+session.getAttribute("dns_security_code")); 

} 



protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     processRequest(request, response); 
    } 


} 

अगर एक वेब अनुप्रयोग वर्णनकर्ता मौजूद नहीं बनाने के लिए: /WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?> 

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

<servlet> 
     <servlet-name>CaptchaServlet</servlet-name> 
     <servlet-class>test.captcha.CaptchaServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>CaptchaServlet</servlet-name> 
    <url-pattern>/captcha-image.jpg</url-pattern> 
</servlet-mapping> 
</web-app> 
+0

भी मुझे बता दें कि हम कैसे इस कोड के लिए लिंक बनाने जेएसपी में? मुझे नहीं पता कि कृपया मेरी मदद करें –

+0

@Asma मुझे लगता है कि '' का उपयोग करके चाल चलनी चाहिए। – Jus12

+0

आपको अपने कोड में सत्र निर्माण को आगे बढ़ाने की आवश्यकता है अन्यथा आपको इस प्रभाव में कोई त्रुटि मिलेगी कि सत्र को नहीं बनाया जा सकता है या प्रतिक्रिया पहले ही लिखी जा चुकी है (या इसी तरह से शब्द के बाद) इसमें कुछ जोड़ा गया है –

2

बस इसे गूगल और आप उदाहरण के बहुत सारे मिल जाएगा। यह व्यापक रूप से (जावा/JSP सहित) कई प्रोग्रामिंग भाषाओं के लिए साबित कर दिया प्लग इन के साथ पुस्तकालय प्रयोग किया जाता है - - यहाँ पहले एक, बहुत आसान आरंभ करने के लिए http://www.devmanuals.com/tutorials/java/jsp/captcha.html

0

reCAPTCHA https://developers.google.com/recaptcha/ प्रयास करें है प्लगइन्स अनुभाग देखें। बीटीडब्ल्यू, आप इस लाइब्रेरी का उपयोग सर्वर साइड हैंडलिंग के बिना भी कर सकते हैं - देखें अनुभाग प्लगइन के बिना प्रदर्शित करें और प्लगइन के बिना सत्यापित करें।