IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
1Beğeni(ler)
  • 1 Post By YazılımMimarı

Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 27 Ağustos 2012, 08:58   #1
Çevrimdışı
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ı sohbet odaları Benimmekan Mobil Sohbet
Alt 03 Eylül 2012, 01:51   #2
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: JSP ile özel dogrulama kodu implementasyon örneği




}
} [/PHP] 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...][/QUOTE]

Bütün işi (jsp) içine kod yazarak yapamazmıyız?Ayrıca arayüz de kullanırken hata oluşuyor.

 
Alıntı ile Cevapla

Alt 03 Eylül 2012, 14:11   #3
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: JSP ile özel dogrulama kodu implementasyon örneği




Oluşan hatayı, hata mesajı ile birlikte yazarsanız yardımcı olabilirim.

Jsp sayfası içine elbet yazılabilir fakat bir sayfa içinde o kadar kodun olması çok dağınık bir yapı haline getirir ve kodun kullanışlığı ve okunabirliği açısındanda yorucu.

 
Alıntı ile Cevapla

Cevapla

Etiketler
örneği, özel


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Özel User Karsilama Kodu Leo mIRC Scripting Sorunları 5 19 Mayıs 2010 06:59
3haneli giriş kodu dogrulama uygulaması? hebeles Unreal IRCd 6 05 Kasım 2009 23:07