ConfirmBitmapHandler.zip



정말 간만에 다시 글을 쓰게 되었네여~
세월아~ 네월아~~
오늘은 자동가입방지, 또는 자동댓글/글쓰기 방지를 위해 뭐좀 하나 만들어 보았습니다.
이번 방법은 제네릭 처리기를 이용하려고 합니다.
우선 다음과 같이 제네릭 처리기를 새항목 추가 합니다.
 
 

제네릭 처리기가 뭘까 해서 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>&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>
 
 
이 소스는 대부분 어렵지 않게 보실 수 있을 것 같아서 특별히 주석은 안달았습니다.
 
미리보기 주소 : http://umc.pe.kr/Sample/ImageValidateCheck/Default.aspx
 
이것을 이용하여 다음엔 시간나는대로 이미지 도용방지 어플케이션을 작성해 보도록 할게여~
Posted by 땡초 POWERUMC

댓글을 달아 주세요