ASP.NET 필터 적용 방법 소개

高洛峰
풀어 주다: 2017-01-21 15:06:32
원래의
1714명이 탐색했습니다.

J2EE 웹 개발에는 특정 URL 접근을 가로채서 필터 메소드를 실행할 수 있는 필터 필터가 있는데, 실제 응용 상황에 따라 요청된 코드를 필터에서 수정하고 세션 정보를 판단하여 이를 수행할 수 있습니다. 간단히 말해서 이 필터는 J2EE의 Chain of Responsibility 디자인 패턴을 적용한 것이라고 할 수 있습니다.

그러면 ASP.NET에서 이러한 필터 구조를 정의하고 필터에서 해당 논리 연산을 수행하는 것이 가능합니까? 대답은 '예'입니다. 이 기사에서는 필터를 작성하는 경우와 이를 IIS 웹 애플리케이션으로 구성하는 방법을 설명합니다.

과정 1: 필터 작성 방법

필터 작성은 실제로 필터 클래스를 작성하는 것, 즉 HttpModule 모듈을 작성하는 것입니다. 이 필터는 IHttpModule 기본 클래스를 구현하고 이를 반복해야 합니다. 다음과 같이 Init 메소드를 작성하고 실제 예를 제공합니다.

이것은 PageFilter.cs입니다.

using System;
using System.Web;
using System.Web.SessionState;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;
public class PageFilter: IHttpModule
{
        public String ModuleName
        {
            get { return "PageFilter"; }
        }
        //在 Init 方法中注册HttpApplication 
        // 通过委托方式注册事件
        public void Init(HttpApplication application)
        {
            application.AcquireRequestState += new EventHandler(Application_AcquireRequestState);            
        }
  private void Application_AcquireRequestState(Object source, EventArgs e)
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            HttpSessionState session = context.Session;
            HttpRequest request = context.Request;
            HttpResponse response = context.Response;
            String contextPath = request.ApplicationPath;
        }
}
로그인 후 복사

"필터"는 "인터셉터"라고도 할 수 있습니다. 전체 HTTP 요청/응답을 가로채는 과정은 전체 요청/응답 과정이 여러 단계로 나누어질 수 있기 때문에 문제가 발생할 것입니다. 즉, 필터가 어떤 특정 단계를 가로채고 싶은지, 위의 Init 함수에서 , 차단하려는 특정 단계를 정의할 수 있습니다. 예를 들어 위의 차단은 요청 세션이 생성되는 단계입니다. AcquireRequestStat는 이 상태를 대표하며 차단 후 해당 처리 기능은 Application_AcquireRequestState이므로 다음과 같이 정의됩니다. Application_AcquireRequestState 메소드에서는 강제 유형 변환을 통해 애플리케이션, 컨텍스트, 세션, 요청 및 응답과 같은 일련의 객체를 얻을 수 있습니다. URL 접속이 합법이며, 현재 접속이 로그인 후의 접속인지 등을 확인하고 있습니다.


게다가, 가로채는 과정 전체가 여러 단계로 구성되어 있는데, 다른 단계는 어떻게 가로채야 할까요? 이는 위와 유사하게 다음 논리에 따라 Init에서 정의하면 됩니다.

application.1단계의 표준 이름 += new EventHandler(이 단계에 해당하는 처리 방법의 이름) 1)
애플리케이션. 2단계의 표준 이름 += new EventHandler(이 2단계에 해당하는 처리 방법 이름); . .

단계의 표준 이름은 이러한 단계가 표준 이름을 가지며 위의 AcquireRequestState와 BeginRequest, AuthenticateRequest, AuthorizeRequest, ResolveRequestCache, AcquireRequestState, PreRequestHandlerExecute 및 PostRequestHandlerExecute와 같은 애플리케이션 객체의 표준 속성임을 의미합니다. , ReleaseRequestState, UpdateRequestCache, EndRequest 등 여러 단계가 있습니다.

이 단계에 해당하는 처리 방법의 이름은 실제로 이 단계에 해당하는 방법에 대한 사용자 정의의 예가 있습니다. 이상, 더 이상의 설명은 없습니다.

또 다른 특별한 주의가 필요한 점은 가로챌 수 있는 단계가 너무 많다는 점이지만, 실제 애플리케이션에서는 한두 개의 단계만 가로채는 경우가 많고, 일부 서버 개체는 가로채기만 할 수도 있다는 점에 유의해야 합니다. 예를 들어 Session 개체는 BeginRequest 단계에는 존재하지 않지만 AcquireRequestState 및 후속 단계에는 존재하므로 실제 필요에 따라 특정 단계를 가로채야 합니다. 이는 초보자에게 가장 일반적인 문제입니다.

프로세스 2: 필터링 구성 방법

.cs 파일에 대한 필터를 작성했는데 이 필터를 작동시키려면 어떻게 해야 합니까? 기본적으로 차단하려면 애플리케이션의 Web.config 파일에 필터를 구성해야 합니다. 위 예제의 구성은 다음과 같습니다.

<configuration>
<system.web>
 <httpModules>
   <add name="pageModule" type="PageFilter"/>
 </httpModules>
</system.web>
</configuration>
로그인 후 복사
이렇게 하면 실제로 구성되며, 그런 다음 사용할 수 있습니다. dll 등을 생성하기 위해 웹 사이트를 게시하면 해당 시간 이후에는 URL 액세스가 자동으로 차단되지만 기본적으로 특정 요청을 차단하려는 경우에는 기본적으로 애플리케이션에 대한 모든 요청이 차단된다는 점을 기억하세요. aspx 파일에 대한 요청만 차단한 다음 필터 논리에 파일 접미사 이름에 대한 판단을 추가할 수 있습니다. aspx가 아닌 경우에는 그대로 두십시오.

ASP의 적용 방법에 대한 자세한 내용은 다음과 같습니다. .NET 필터를 사용하려면 PHP 중국어 웹사이트를 주목하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿