Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Problem mit captcha in jsf

Empfohlene Antworten

Veröffentlicht

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.