Tekil Mesaj gösterimi
Alt 27 Ağustos 2012, 08:58   #1
Çevrimdışı
YazılımMimarı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
JSP ile özel dogrulama kodu implementasyon örneği




Merhaba,
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
Kütüphaneler
PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
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 requestHttpServletResponse 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.PLAINparamInt(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(widthheightBufferedImage.TYPE_INT_RGB); 
 
Graphics2D g = (Graphics2DbufferedImage.getGraphics();  g.setColor(backgroundColor);
 
g.fillRect(00widthheight); 
 
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 width
float spacePerChar spaceForLetters / (charsToPrint 1.0f); 
 
StringBuffer finalString = new StringBuffer(); 
 for (
int i 0charsToPrinti++) {
 
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(maxAdvancefontHeight);
 
int halfCharDim = (int) (charDim 2); 
 
BufferedImage charImage = new BufferedImage(charDimcharDimBufferedImage.TYPE_INT_ARGB); 
Graphics2D charGraphics charImage.createGraphics();
 
charGraphics.translate(halfCharDimhalfCharDim);
 
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("" characterToShowcharX, (int) ((charDim fontMetrics.getAscent()) / fontMetrics.getAscent())); 
 
float x horizMargin spacePerChar * (i) - charDim 2.0f;
 
int y = (int) ((height charDim) / 2);
 
g.drawImage(charImage, (int) xycharDimcharDimnullnull); 
 
charGraphics.dispose();
 } 
 
g.setColor(borderColor);
g.drawRect(00width 1height 1); 
 
Iterator iter ImageIO.getImageWritersByFormatName(imageFormat);
 if (
iter.hasNext()) { 
try
 { 
ImageWriter writer = (ImageWriteriter.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(bufferedImagenullnull);
 
writer.write(nullimageIOiwp); 
} catch (
IOException ex) { 
Logger.getLogger(MyReCaptcha.class.getName()).logLevel.SEVEREnullex);
 } 
} 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 requestString paramName,  String defaultString) {
 return 
request.getParameter(paramName) != null ?  request.getParameter(paramName) : defaultString;
 }  
public static 
int paramInt(HttpServletRequest requestString paramName,  int defaultInt) {
 return 
request.getParameter(paramName) != null ?  Integer.parseInt(request.getParameter(paramName)) : defaultInt



Arayüzde kullanımı
index.jsp
PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
<%-- Document index Created on 08.Eyl.201109: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(requestresponse);%>
 <
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

Ekran çıktısı ;



Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.



Kolay gelsin.
Kullanımda problem yaşayanlar, bu başlık altından sorabilir.


Kodlapaylas.com'u geliştirirken yazdığım makalelerden birisidir.


[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları eglen sohbet sohbet