JSP ile özel dogrulama kodu implementasyon örneği ve değerleri

Ahbap

Harbi Üye
Forum Üyesi
Katılım
29 Mayıs 2019
Mesajlar
8,562
Tepkime puanı
2
Genellikle formları bot ve spamlardan korumak amacıyla kullanılan doğrulama kodu için Google'un apisini kullanıyordum. Hem tasarımı olsun hemde hızlı olmasından dolayı. Fakat formları post ettikten sonra ajax ile belirli div alanlarının içini refresh ettirdiğinizde malesef Google apisi kayboluyor. Bunun sebebi google apisinin çalışma mantığı sayfanın refresh edilmesine göre kod üretmesidir. Bunu aşmak için kendi doğrulama kodumu yazmaya karar verdim. Kaynak olarak 7-8 tane kaynak buldum derleyip, ufak bir şey ürettim.
İşe koyulalım.
Yapı olarak, spagetti koddan nefret etmem ve bir düzen aşığı olarak. Var olan web sayfalarının (jsp) içine minimum kod yazmayı esas kabul ediyorum. Bütün işi arka tarafta mutfakta(class'lar içinde) yapıp bize lazım olanı elde edip, sunmak en iyilerinden biri olsa gerek.
Recaptcha Class'ı.

MyReCaptcha.java

PHP:
import java.awt.Color; 
import java.awt.Font; 
import java.awt.FontMetrics; 
import java.awt.Graphics2D; 
import java.awt.geom.AffineTransform;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
 import java.util.Iterator;
 import java.util.logging.Level;
 import java.util.logging.Logger; 
import javax.imageio.IIOImage;
 import javax.imageio.ImageIO;
 import javax.imageio.ImageWriteParam;
 import javax.imageio.ImageWriter;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse; 
 /* * To change this template, choose Tools | Templates * and open the template in the editor.
 */ 
/** 
* * [MENTION=21475]AuthoR[/MENTION] turgay 
*/   

 public class MyReCaptcha {
  public MyReCaptcha(HttpServletRequest request, HttpServletResponse response) {  
 String imageFormat = "jpg"; 
response.setContentType("image/" + imageFormat); 
 try {
 // Imaj Ozellikleri  
Color backgroundColor = Color.BLUE; 
//Arka Plan rengi 
Color borderColor = Color.black; 
//Kenarlık Rengi Color textColor = Color.white; 
// Yazi rengi 
Font textFont = new Font("Arial", Font.PLAIN, paramInt(request, "fontSize", 20)); 
//Yazi tipi
 int charsToPrint = 6; 
//Yazi boyutu
 int width = paramInt(request, "width", 100);
 //imaj genisliği
 int height = paramInt(request, "height", 30);
 //imaj yüksekliği 
float horizMargin = 20.0f; 
//yatak bosluk
 float imageQuality = 0.95f;
 // Imaj kalitesi(Maksimum deger 1.0)
 double rotationRange = 0.7; 
// Yazılarin ekrandaki durusu (Donus deger aralıgı)  
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
 Graphics2D g = (Graphics2D) bufferedImage.getGraphics();  g.setColor(backgroundColor);
 g.fillRect(0, 0, width, height); 
 g.setColor(textColor);
 g.setFont(textFont); 
 FontMetrics fontMetrics = g.getFontMetrics();
 int maxAdvance = fontMetrics.getMaxAdvance();
 int fontHeight = fontMetrics.getHeight();  
String elegibleChars = "ABCDEFGHJKLMPQRSTUVWXYabcdefhjkmnpqrstuvwxy234567 89";
 char[] chars = elegibleChars.toCharArray(); 
 float spaceForLetters = -horizMargin * 2 + width; 
float spacePerChar = spaceForLetters / (charsToPrint - 1.0f); 
 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); 
 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.getRotateIn stance(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);
 g.drawImage(charImage, (int) x, y, charDim, charDim, null, null); 
 charGraphics.dispose();
 } 
 g.setColor(borderColor);
g.drawRect(0, 0, width - 1, height - 1); 
 Iterator iter = ImageIO.getImageWritersByFormatName(imageFormat);
 if (iter.hasNext()) { 
try
 { 
ImageWriter writer = (ImageWriter) iter.next(); 
ImageWriteParam iwp = writer.getDefaultWriteParam();
 if (imageFormat.equalsIgnoreCase("jpg") || imageFormat.equalsIgnoreCase("jpeg")) { 
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLIC IT); 
iwp.setCompressionQuality(imageQuality); 
}
 writer.setOutput(ImageIO.createImageOutputStream(r esponse.getOutputStream()));
 IIOImage imageIO = new IIOImage(bufferedImage, null, null);
 writer.write(null, imageIO, iwp); 
} catch (IOException ex) { 
Logger.getLogger(MyReCaptcha.class.getName()).log( Level.SEVERE, null, ex);
 } 
} else {
 throw new RuntimeException("no encoder found for jsp"); 
} 
 request.getSession().setAttribute("captcha", finalString.toString()); 
 // Dogrulama kodunun dogrulugunu test icin session ataması  g.dispose(); } catch (Exception 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; 
} 
}


Arayüzde kullanımı


index.jsp

PHP:
<%-- Document : index Created on : 08.Eyl.2011, 09:50:24 Author : turgay --%> 
 <%@ Page  import="util.MyReCaptcha"%>
 <%@ Page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html> 
<html> 
<head> 
<title>Ozel Dogrulama Kodu</title> 
<style> 
 </style> 
</head> 
<body> 
<table> 
<tr>
<td> 
<form method="POST" action="index.jsp"> 
<% MyReCaptcha cs = new MyReCaptcha(request, response);%>
 <input type="text" name="recaptcha" id="recaptcha" />
 <%if(session.getAttribute("captcha").equals(reques t.getParameter("recaptcha"))){ out.println("Dogru"); 
}else{
out.println("Yanlis");
}%>
 </form> 
 </td>
</tr>
 </table>
 </body>
 </html>


 

Nutella

Harbi Üye
Bayan Üye
Özel Üye
Katılım
2 Ocak 2021
Mesajlar
9,432
Tepkime puanı
8
Cinsiyet
  1. Bayan
Takım
Galatasaray
Paylaşım için teşekkürler.
 
İçerik sağlayıcı "paylaşım" sitelerinden biri olan Harbimekan.Com Forum, Eğlence ve Güncel Paylaşım Platformu Adresimizde 5651 Sayılı Kanun’un 8. Maddesine ve T.C.K’nın 125. Maddesine göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur. Harbimekan.Com sitesindeki konular yada mesajlar hakkında yapılacak tüm hukuksal Şikayetler için info@harbimekan.com yada iletişim sayfası üzerinden iletişime geçilmesi halinde ilgili kanunlar ve yönetmelikler çerçevesinde en geç 3 Gün (72 Saat) içerisinde Forum yönetimi olarak tarafımızdan gereken işlemler yapılacaktır.

Bu Site, Bilim ve Sağlık Haber Ajansı Üyesidir.

Yığıntı - 8kez - kaynak mağazam - Uğur Ağdaş