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:
BufferedImage bufferedImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
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 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;
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 {
{
protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
int width = 150;
int height = 50;
int height = 50;
int PASSWORD_LENGTH = 5;
Random rr= new Random();
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();
{
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' }
// };
// { '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);
g2d.setFont(font);
RenderingHints rh = new RenderingHints(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
rh.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHints(rh);
GradientPaint gp = new GradientPaint(0, 0,
Color.red, 0, height/2, Color.black, true);
Color.red, 0, height/2, Color.black, true);
g2d.setPaint(gp);
g2d.fillRect(0, 0, width, height);
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 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;
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);
}
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();
}
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);
}
{
if (captcha.equals(code))
{
pageContext.writeDiagnostics(this, " Correct Captcha Code----", 1);
}

.jpg)
Hi Satya,
ReplyDeleteReally 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
even I am not able to see image.. please help
ReplyDeleteme too...please help
ReplyDeleteAfter register the i am not able to seen the captcha image .Please help me .I am able to seen the local.
ReplyDeleteThanks for the article.
ReplyDeleteIt works fine from Jdev but doesn't work from Server.
How do we register the java servlet in server?
This is half cooked information
ReplyDelete