posted by 방랑군 2012. 1. 7. 21:56

출처 : http://blog.naver.com/umjunil?Redirect=Log&logNo=140035839239

정말 간만에 다시 글을 쓰게 되었네여~

세월아~ 네월아~~

오늘은 자동가입방지, 또는 자동댓글/글쓰기 방지를 위해 뭐좀 하나 만들어 보았습니다.

이번 방법은 제네릭 처리기를 이용하려고 합니다.

우선 다음과 같이 제네릭 처리기를 새항목 추가 합니다.

제네릭 처리기가 뭘까 해서 MSDN 을 보니…. 안나왔더군요~

우선 제네릭 처리기를 생성해 보기로 하겠습니다.

<![endif]>

.. 단순히 IHttpHandler 를 상속하였네요~

친절하게도 Hello World 와 함께 말이져~

요놈은 IIS C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll 과 같이 매핑이 되어있으며, C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\Web.Config

<add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory"

validate="true" /> 과 같이 핸들러가 등록 되어 있군요~,

결론은 IHttpHandler 를 구현하라는 것이네요.

그럼 ConfirmBitmapHandler.ashx 의 소스를 보여드립니다.

<%@ WebHandler Language="C#" Class="ConfirmBitmapHandler" %>

using System;

using System.Web;

using System.Drawing;

using System.Drawing.Imaging;

using System.Drawing.Drawing2D;

using System.Web.SessionState;

public class ConfirmBitmapHandler : IHttpHandler, IRequiresSessionState {

public void ProcessRequest (HttpContext context) {

context.Response.ContentType = "image/jpeg";

// 이미지 사이즈

int lenX = 80, lenY = 30;

Bitmap bm = new Bitmap( lenX, lenY );

Graphics g = Graphics.FromImage( bm );

// 배경으로 그라데이션 처리

LinearGradientBrush bgGr = new LinearGradientBrush(

new Point(0,0),

new Point(lenX, lenY),

Color.Blue,

Color.Black);

g.FillRectangle( bgGr, 0, 0, lenX, lenY );

// 5자리 숫자의 난수를 발생하여 텍스트를 만든다

string text = string.Empty;

Random rnd = new Random();

for(int i=0; i<5; i++)

{

text += rnd.Next(9).ToString();

}

// 텍스트를 그린다.

Brush textBrush = new SolidBrush( Color.White );

g.DrawString( text, new Font("굴림", 15), textBrush, 10, 5, StringFormat.GenericDefault );

// 스트림에 비트맵을 쓴다.

bm.Save( context.Response.OutputStream, ImageFormat.Jpeg );

// 5자리 숫자를 세션에 담는다.

context.Session["ValidateString"] = text;

}

public bool IsReusable {

get {

return false;

}

}

}

그럼 이제 우리가 만든 ConfirmBitmapHandler.ashx 를 브라우져 보기를 통해 실행해 보십시오

실행결과>>>

<![endif]>

오오~~~~~ 짝짝짝~~ 잘 실행이 되었네여~

그럼 다음으로 방금 만든 전처리기를 이용하여 웹어플케이션을 만들어 봅시다.

소스 ( Default.aspx )

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

private void Page_Load(object sender, EventArgs e)

{

}

protected void lnkValidate_Click(object sender, EventArgs e)

{

string validateString = (string)Session["ValidateString"] ?? string.Empty;

if (txtValidateString.Text == validateString )

lblResult.Text = "오케이~~ 통과~!";

else

lblResult.Text = "틀렷삼~~~~~ ";

}

</script>

<script type="text/javascript">

function checkEnter()

{

if( event.keyCode == 13 )

{

__doPostBack('lnkValidate','');

}

else

return true;

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>제목 없음</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<img src="ConfirmBitmapHandler.ashx" />

<p></p>

<asp:TextBox ID="txtValidateString" runat="server" onkeypress="return checkEnter()"></asp:TextBox>&nbsp;&nbsp;&nbsp;

<asp:LinkButton ID="lnkValidate" runat="server" OnClick="lnkValidate_Click">확인</asp:LinkButton>

<p></p>

<asp:Label ID="lblResult" runat="server"></asp:Label>

</div>

</form>

</body>

</html>

이 소스는 대부분 어렵지 않게 보실 수 있을 것 같아서 특별히 주석은 안달았습니다.

[출처] 제네릭 처리기를 이용하여 자동가입방지 폼 구현|작성자 땡초