CAPTCHA IMAGE GENERATION IN OAF PAGE

THE DOCUMENT DESCRIBES HOW TO CREATE CAPTCHA IMAGE IN OAF PAGE:



Step 1: get captcha:

// to get the captchaImage Field in OAF page(code to be written in controller)=>

    OAImageBean captchaImage = (OAImageBean)webBean.findIndexedChildRecursive("CaptchaImageField");
    captchaImage.setSource("captchaservlet");

Step 2: Creation of captcha servlet:





Step 3: captchaservlet code to generate captcha image:

import com.sun.java.util.collections.Random;
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 javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.GradientPaint;
import java.awt.RenderingHints;
 
public class CaptchaServlet extends HttpServlet
{
  protected void processRequest(HttpServletRequest request,
                                  HttpServletResponse response)
                   throws ServletException, IOException {
      int width = 150;
      int height = 50;
      int PASSWORD_LENGTH = 5;
      Random rr= new Random();
          StringBuffer sb = new StringBuffer();  
          for (int x = 0; x < PASSWORD_LENGTH; x++)
          {
          int ran=rr.nextInt(3)+1;
          switch(ran)
            {
            case 1: sb.append((char)((int)(Math.random()*9)+48));
                   break;
            case 2: sb.append((char)((int)(Math.random()*26)+65));
                   break;
            case 3: sb.append((char)((int)(Math.random()*26)+97));
                   break;
          }
          }
  char newchar[] = sb.toString().toCharArray();
  //      char data[][] = {
  //          { 'z', 'e', 't', 'c', 'o', 'd', 'e' },
  //          { 'l', 'i', 'n', 'u', 'x' },
  //          { 'f', 'r', 'e', 'e', 'b', 's', 'd' },
  //          { 'u', 'b', 'u', 'n', 't', 'u' },
  //          { 'u', 'b', 'u', 'n', 't', 'u' },
  //          { 'r', 't', '3', 'j', 'n', 'z' },
  //          { 'f', 'g', 'e', '1', 't', 'l' },
  //          { 'a', 'x', 'k', 'y', '8', 'k' },
  //          { 'f', 'h', 't', 'q', 'a', 'z' },
  //          { 'r', 'q', 's', 'f', '8', '1' },
  //          { 'e', 'h', '5', 's', 'y', 'm' },
  //          { 'q', 't', 'r', 'i', 'w', 'r' },
  //          { 'j', 'e', 'e' }
  //      };

      BufferedImage bufferedImage = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
      Graphics2D g2d = bufferedImage.createGraphics();
      Font font = new Font("Georgia", Font.BOLD, 18);
      g2d.setFont(font);
      RenderingHints rh = new RenderingHints(
             RenderingHints.KEY_ANTIALIASING,
             RenderingHints.VALUE_ANTIALIAS_ON);
      rh.put(RenderingHints.KEY_RENDERING,
             RenderingHints.VALUE_RENDER_QUALITY);
      g2d.setRenderingHints(rh);
      GradientPaint gp = new GradientPaint(0, 0,
      Color.red, 0, height/2, Color.black, true);
      g2d.setPaint(gp);
      g2d.fillRect(0, 0, width, height);
      g2d.setColor(new Color(220, 218, 222));
      Random r = new Random();
      int index = Math.abs(r.nextInt()) % 5;
  
  //      String captcha = String.copyValueOf(data[index]);
      String captcha = String.copyValueOf(newchar);
      Object captcha123 = (Object)captcha;
     //    request.getSession(true).setAttribute("captcha",captcha123);
      request.getSession(true).putValue("captcha",captcha123);
     //HttpSession session = request.getSession();
      int x = 0;
      int y = 0;
      for (int i=0; i<newchar.length; i++) {
          x += 10 + (Math.abs(r.nextInt()) % 15);
          y = 20 + Math.abs(r.nextInt()) % 20;
          g2d.drawChars(newchar, i, 1, x, y);
      }
      g2d.dispose();
      response.setContentType("image/png");
      OutputStream os = response.getOutputStream();
      ImageIO.write(bufferedImage, "png", os);
      os.close();
    }

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

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

Step 4: Validation for Captcha on submit:

String captcha = pageContext.getSessionValueDirect("captcha") + "";
String code = pageContext.getParameter("CaptchaTextField");
if ((captcha != null) && (code != null))
            {
              if (captcha.equals(code))
              {
                pageContext.writeDiagnostics(this, " Correct Captcha Code----", 1);
           
              }

Comments

  1. Hi Satya,

    Really help full this.After register the i am not able to seen the captcha image .Please help me .I am able to seen the local.

    Regards,
    srinivas

    ReplyDelete
  2. even I am not able to see image.. please help

    ReplyDelete
  3. After register the i am not able to seen the captcha image .Please help me .I am able to seen the local.

    ReplyDelete
  4. Thanks for the article.
    It works fine from Jdev but doesn't work from Server.
    How do we register the java servlet in server?

    ReplyDelete
  5. This is half cooked information

    ReplyDelete

Post a Comment

Popular posts from this blog

Query to get Salary Change details in Fusion HCM

Oracle Fusion HCM - Enhancements to Summary of Changes and History Sections in Redwood Workforce Structures Pages

๐Ÿงพ Streamlining Payroll Operations with Oracle Payroll Activity Center