Zum Inhalt springen

Problem mit captcha in jsf


Alive3000

Empfohlene Beiträge

Hallo ich hab nochmal eine frage. ich muss ein captcha in eine jsf seite einbinden. ich habe auch schon einen code gefunden der mir sieses erstellt und eigentlich in eine jsp reingeschrieben werden soll.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@ page import="java.util.*"%>

<%@ page import="java.io.*"%>

<%@ page import="javax.servlet.*"%>

<%@ page import="javax.servlet.http.*"%>

<%@ page import="java.awt.*"%>

<%@ page import="java.awt.image.*"%>

<%@ page import="javax.imageio.*"%>

<%@ page import="java.awt.geom.*"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<%

 //========================================================

 // Kick Ass Captcha JSP

 //

 // Michael Connor 2007

 //

 // I just couldn't handle the thought of downloading a

 // big jar and configuring some servlet.xml and having

 // little to no control of anything...

 // You can send in height and width parameters.

 // The captcha value will be placed in the session in

 // a parameter called 'captcha'

 //

 // Feel free to use this code and do whatever the hell

 // you want to it.

 //========================================================


  String imageFormat = "jpg";

  response.setContentType("image/" + imageFormat);


 try {

   // you can pass in fontSize, width, height via the request


   Color backgroundColor = Color.red;

   Color borderColor = Color.black;

   Color textColor = Color.white;

   Color circleColor = new Color(160,160,160);

   Font textFont = new Font("Arial", Font.PLAIN, paramInt(request, "fontSize", 24));

   int charsToPrint = 6;

   int width = paramInt(request, "width", 150);

   int height = paramInt(request, "height", 80);

   int circlesToDraw = 6;

   float horizMargin = 20.0f;

   float imageQuality = 0.95f; // max is 1.0 (this is for jpeg)

   double rotationRange = 0.7; // this is radians

   BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);


   Graphics2D g = (Graphics2D) bufferedImage.getGraphics();


   g.setColor(backgroundColor);

   g.fillRect(0, 0, width, height);


   // lets make some noisey circles

   g.setColor(circleColor);

   for ( int i = 0; i < circlesToDraw; i++ ) {

     int circleRadius = (int) (Math.random() * height / 2.0);

     int circleX = (int) (Math.random() * width - circleRadius);

     int circleY = (int) (Math.random() * height - circleRadius);

     g.drawOval(circleX, circleY, circleRadius * 2, circleRadius * 2);

   }


   g.setColor(textColor);

   g.setFont(textFont);


   FontMetrics fontMetrics = g.getFontMetrics();

   int maxAdvance = fontMetrics.getMaxAdvance();

   int fontHeight = fontMetrics.getHeight();


   // i removed 1 and l and i because there are confusing to users...

   // Z, z, and N also get confusing when rotated

   // 0, O, and o are also confusing...

   // lowercase G looks a lot like a 9 so i killed it

   // this should ideally be done for every language...

   // i like controlling the characters though because it helps prevent confusion

   String elegibleChars = "ABCDEFGHJKLMPQRSTUVWXYabcdefhjkmnpqrstuvwxy23456789";

   char[] chars = elegibleChars.toCharArray();


   float spaceForLetters = -horizMargin * 2 + width;

   float spacePerChar = spaceForLetters / (charsToPrint - 1.0f);


   AffineTransform transform = g.getTransform();


   StringBuffer finalString = new StringBuffer();


   for ( int i = 0; i < charsToPrint; i++ ) {

     double randomValue = Math.random();

     int randomIndex = (int) Math.round(randomValue * (chars.length - 1));

     char characterToShow = chars[randomIndex];

     finalString.append(characterToShow);


     // this is a separate canvas used for the character so that

     // we can rotate it independently

     int charImageWidth = maxAdvance * 2;

     int charImageHeight = fontHeight * 2;

     int charWidth = fontMetrics.charWidth(characterToShow);

     int charDim = Math.max(maxAdvance, fontHeight);

     int halfCharDim = (int) (charDim / 2);


     BufferedImage charImage = new BufferedImage(charDim, charDim, BufferedImage.TYPE_INT_ARGB);

     Graphics2D charGraphics = charImage.createGraphics();

     charGraphics.translate(halfCharDim, halfCharDim);

     double angle = (Math.random() - 0.5) * rotationRange;

     charGraphics.transform(AffineTransform.getRotateInstance(angle));

     charGraphics.translate(-halfCharDim,-halfCharDim);

     charGraphics.setColor(textColor);

     charGraphics.setFont(textFont);


     int charX = (int) (0.5 * charDim - 0.5 * charWidth);

     charGraphics.drawString("" + characterToShow, charX, 

                            (int) ((charDim - fontMetrics.getAscent()) 

                                   / 2 + fontMetrics.getAscent()));


     float x = horizMargin + spacePerChar * (i) - charDim / 2.0f;

     int y = (int) ((height - charDim) / 2);

//System.out.println("x=" + x + " height=" + height + " charDim=" + charDim + " y=" + y + " advance=" + maxAdvance + " fontHeight=" + fontHeight + " ascent=" + fontMetrics.getAscent());

     g.drawImage(charImage, (int) x, y, charDim, charDim, null, null);


     charGraphics.dispose();

   }


   // let's do the border

   g.setColor(borderColor);

   g.drawRect(0, 0, width - 1, height - 1);


   //Write the image as a jpg

   Iterator iter = ImageIO.getImageWritersByFormatName(imageFormat);

   if( iter.hasNext() ) {

     ImageWriter writer = (ImageWriter)iter.next();

     ImageWriteParam iwp = writer.getDefaultWriteParam();

     if ( imageFormat.equalsIgnoreCase("jpg") || imageFormat.equalsIgnoreCase("jpeg") ) {

       iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);

       iwp.setCompressionQuality(imageQuality);

     }

     writer.setOutput(ImageIO.createImageOutputStream(response.getOutputStream()));

     IIOImage imageIO = new IIOImage(bufferedImage, null, null);

     writer.write(null, imageIO, iwp);

   } else {

     throw new RuntimeException("no encoder found for jsp");

   }


   // let's stick the final string in the session

   request.getSession().setAttribute("captcha", finalString.toString());


   g.dispose();

 } catch (IOException ioe) {

   throw new RuntimeException("Unable to build image" , ioe);

 }


%>


<%!

  public static String paramString(HttpServletRequest request, String paramName, String defaultString) {

    return request.getParameter(paramName) != null ? request.getParameter(paramName) : defaultString;

  }


  public static int paramInt(HttpServletRequest request, String paramName, int defaultInt) {

    return request.getParameter(paramName) != null ? Integer.parseInt(request.getParameter(paramName)) : defaultInt;

  }


%>

so ich kann jetzt nur nicht über <h:graphicImage> diesen code eingeben da die jsf seiten wohl mit dem <% nicht klarkommen. wie kann ich den ccode am besten in eine jsf seite verpacken?

danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...