Реклама:

Модули ASP.NET, связанные с защитой, приведены в табл. 2-2.

Табл. 2-2. Защитные модули ASP.NET

Имя

Описание

WindnwsAuthenticationModule

Используется для аутентификации Microsoft Windows.

 

Для получения маркера Windows связывается с IIS

FormsAuthentkationModule

Используется для аутентификации Forms. Выполняет пере-

 

адресацию на страницу регистрации и подтверждения паро-

 

лей аутентификации

Passpo rtAuthentka tionModu le

Используется для аутентификации Microsoft Passport

UrlAuthorizationModule

Проверяет настройки авторизации в файле web.config

FtieAuthorizatiortModute

Проверяет авторизацию клиента, используя списки управ-

 

ления доступом (ACL) файловой системы NTFS

Role та nagerModu le

Выбирает роли для клиента из провайдера ролей и опцио-

 

нально кэширует их

ВНИМАНИЕ! Порядок, в котором будут вызываться модули (если они подписаны на одно и то же событие), зависит от порядка их регистрации в элементе <МрМоди1ез> файла ууео.сопКд. Обычно порядок модулей не изменяется, однако в главе 5 приведен сценарий, где это сделать необходимо.

Написание модуля

Как я уже говорил, существует два метода получения кода, который будет выполняться в конвейере запроса. Наиболее простой способ состоит в добавлении в проект файла global.asax и обработке одного из событий HttpApplication. В приведенном ниже примере код вызывается в начале кажлого запроса и регистрирует запрашиваемый ресурс.

Управление событиями конвейера в файле global.asax

<Ш- Арр) ication Language-'Clf" %>

<script runat="server">

protected void Aoplication_BeginReqiiest( object sender. EventArgs e)

{

II Выполняет некоторое действие, как, например, регистрацию во внешней системе Logger Log(Context.Request.Path):

\

</scrlpt>

Q СОВЕТ Между модулями также можно передавать данные. Модуль HttpContext имеет свойство Items, являющееся коллекцией. Эта коллекция доступна во время выполнения всего запроса. Например, на этапе события BeginRequest вы можете добавить в коллекцию Items данные, а позже извлечь их (в странице или на этапе события EndRequest).

Для того чтобы переписать этот код и виде модуля, его нужно упаковать п отдельную сборку и создать класс, реализующий интерфейс IIIttpModule. В метоле Ink путем делегирования выполняется подписка на интересующие нас события. Метод Dispose позволяет выполнять при необходимости любую очистку.

Обработка событий конвейера с помощью модуля

class LoQijinqModule IHttpHodule {

void ]rnt(HttpApplication арр) {

app.BegiiReouest += OnEnter;

// Здесь пои необходимоеiи можно выполнить очистку ресурса void Dispose() { )

void Or.Ente'(object sender, EventArgs e) {

intoContexi context. = HttpContext.Current; Logger, Iog(context.Request.Path);

>

)

1 (осле этого вам потребуется зарегистрировать модуль в локальном файле web.config, добавив элемент <httpModules>.

<corfiguration> <system.web> <httpModules> <add name="LoggingModule" type="LoggingHodule, MyModuIe" /> </rutpModuies>


⇐ Предыдущая страница| |Следующая страница ⇒