세월아~ 네월아~~
오늘은 자동가입방지, 또는 자동댓글/글쓰기 방지를 위해 뭐좀 하나 만들어 보았습니다.
이번 방법은 제네릭 처리기를 이용하려고 합니다.
우선 다음과 같이 제네릭 처리기를 새항목 추가 합니다.
제네릭 처리기가 뭘까 해서 MSDN 을 보니…. 안나왔더군요~ ㅋ
우선 제네릭 처리기를 생성해 보기로 하겠습니다.
끙.. 단순히 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 를 브라우져 보기를 통해 실행해 보십시오
실행결과>>>
오오~~~~~ 짝짝짝~~ 잘 실행이 되었네여~
그럼 다음으로 방금 만든 전처리기를 이용하여 웹어플케이션을 만들어 봅시다.
소스 ( 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>
<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>
|
이 소스는 대부분 어렵지 않게 보실 수 있을 것 같아서 특별히 주석은 안달았습니다.
이것을 이용하여 다음엔 시간나는대로 이미지 도용방지 어플케이션을 작성해 보도록 할게여~
'.NET > ASP.NET' 카테고리의 다른 글
너 ASPX 웹폼 확장자를 바꿔봤니? 난 해봤~어! (0) | 2007.04.09 |
---|---|
Composite Pattern 을 사용하여 MVC Pattern 구현 (0) | 2007.04.06 |
이미지를 합성해보자~ [ 이미지 도용방지 ] (0) | 2007.04.06 |
제네릭 처리기를 이용하여 자동가입방지 폼 구현 (Captcha) (0) | 2007.04.05 |
파일을 압축하여 내려받자 (0) | 2007.04.05 |
Web.Config 를 확장해 보자 (2) | 2007.04.05 |