2012-04-09 3 views
3

У меня есть код, используемый для определения того, вошел ли пользователь в систему, и я хочу поместить его на каждую страницу на веб-сайте ASP.NET, чтобы только зарегистрированные пользователи могли его просматривать. Проблема заключается в том, что сайт разбит на несколько проектов/решений, поэтому сохранение одного фрагмента кода может быть затруднено.Где проверить аутентификацию в ASP.NET

Я думал, что могу создать класс, который наследует System.Web.UI.Page, и переопределяет Page_Init, но для этого потребуется изменить все страницы, чтобы они наследовали новый класс. Также я не думаю, что это будет работать в разных проектах.

Итак, я подумал о приближении проблемы с другой стороны: используя АОП. Я никогда не использовал Аспекты раньше, но похоже, что я мог использовать PostSharp для написания Aspect, который вводит код перед каждым Page_Init (или, может быть, Page_Load?). Это может работать как быстрое решение, но я могу столкнуться с проблемами, если мне нужна страница, чтобы не выполнять проверку подлинности (доступной для всех).

Чтобы уточнить, у меня уже есть решение для входа в систему; Я просто ищу проверку, что логин на каждой странице.

+4

Почему вы не используете ['MembershipProvider'] (http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx)? Все это сделано для вас ASP.NET. – jrummell

+2

Как правило, страницы ASP.NET должны быть построены на главной странице, где общий код централизован, включая проверку входа. Вы можете сделать 2 мастер-страницы, которые проверяют ее, а другую - нет. – MarioDS

+0

@ jrummell это недостаточно гибко. В реальных проектах, когда вы планируете настраивать проекты, вы не можете пойти для MembershipProvider. Правильно? – Pankaj

ответ

3

Загляните в HttpModules. Рамка asp.net уже запрограммирована так, что модуль работает на каждом запросе страницы, вам просто нужно написать его и добавить в web.config.

http://msdn.microsoft.com/en-us/library/zec9k340(v=vs.71).aspx

EDIT: Вот лучше ссылку, которая демонстрирует обработку события BeginRequest http://msdn.microsoft.com/en-us/library/ms227673(v=vs.85).aspx

+0

Нет, система будет достаточно гибкой, чтобы написать код для нее в Code Behind, вместо того, чтобы явно указывать роли в web.config. – Pankaj

+1

Вы не указываете роли в сети.config, вы просто регистрируете модуль. Работа модуля аутентификации полностью зависит от вас, web.config просто говорит: «Запустите этот модуль для каждого запроса на страницу». – mafue

1

Как @jrummell упоминалось, есть MembershipProvider, который является отличным выбором, но если вы создаете пользовательский логин солитона, проверьте этот link, который имеет довольно простой шаг входа в систему шаг за шагом

0

Фонд Windows Identity Foundation может решить эту проблему для вас. См. http://msdn.microsoft.com/en-us/security/aa570351 для получения более подробной информации о WIF. Не нужно изобретать велосипед. Если у вас было только одно веб-приложение, достаточно было бы проверить подлинность форм.

1

Поскольку вы, похоже, работаете с вашим решением для входа в систему и создаете класс, который переопределяет звуки page_init, как ваш лучший вариант. Это может работать и в других проектах, просто создавая этот класс в отдельном проекте, который вы можете включить в другое решение (s) ... Честно говоря, это самый простой способ охватить логику для нескольких проектов. Это также будет легко поддерживается, потому что вам нужно будет обновить одно местоположение в будущем.

Если вы используете MasterPages, вам не нужно будет ударять по всем страницам, вы можете просто включить его на определенные MasterPage (ы) и установить все страницы, на которые вы хотите, чтобы аутентификация использовала этот MasterPage.

Смежные вопросы