Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > вопросы по паттерну InterceptingFilte


Автор: x4444 22.1.2007, 14:29
Читаю статью про паттрен Intercepting Filter   и не пойму что за интерфейс такой Processor и что за класс AuthenticationFilter?

статья: http://java.sun.com/blueprints/corej2eepatterns/Patterns/InterceptingFilter.html
по-русски: http://javagu.ru/portal/dt?last=false&provider=javaguru&ArticleId=GURU_ARTICLE_81161&SecID=GURU_SECTION_80703

Автор: chief39 22.1.2007, 19:27
"Бибигон и Брундуляк... всё просто. Не было никакого индюка, это такая красивая легенда. Был петух!"(с)камеди клаб

Смотри.
Есть у тебя 10 страничек: "купить", "заказать", "продать", "перевести деньги", "просмотреть эксклюзивный список своих любовниц" и проч.

Понятно что для каждого - своё.
Но! Каждый из этих страничек может быть доступна. Другое дело, что когда простой гражданин попадает на неё - неясно, можно ли показывать ему список чьих-то любовниц? Да и вообще - чьих именно???
Выходит, надо залогиниться?
Но если всё-таки не залогинился - на каждой из этих страничек надо вставлять проверку "залогинился ли он" и сообщение "залогинься, скотина беспардонная!" если он внаглую лезет.

Как добьёмся такого? - прально, копипэйстом!
Но копипэйст - неправильно. Вдруг вместо "скотина беспардонная" захочешь писать "уважаемый". Придётся везде править(а где-то забудешь - обидятся).
Можно проверялку какую-то вставить. Но её вызывать тоже отовсюду надо....

А тут можно решить как... все запросы ко всем твоим страничкам сначала попадают на фильтр. Там можно реализовать всё общее, что нужно для проверки залогинености и сообщению "скотине" этого нелицеприятного факта его биографии. 
То есть пришёл запрос - вперёд, в чистилище фильтр - залогинен? - пжалте - ваши любовницы! 
Не залогинен??? - "залогинься, скотина беспардонная!"

И странице списка любовниц или распоряжения твоим счётом пофик что да как - она уверенна что ты уже успешно прошёл "чистилище", иначе к ней порсто не попал бы

Ну, конечно, этотолько приём программирования. Можно туда впихнуть всё общее для набора страницчто считаешь нужным, примеры на джавагуре есть. smile



Автор: batigoal 23.1.2007, 09:30
chief39, это 5+ !!!

Автор: chief39 23.1.2007, 15:56
Цитата(x4444 @  22.1.2007,  14:29 Найти цитируемый пост)
Читаю статью про паттрен Intercepting Filter   и не пойму что за интерфейс такой Processor и что за класс AuthenticationFilter?

Ай-яй! Пардон! Совсем перестал в детали вникать - слона-то я и не приметил!


Цитата(x4444 @  22.1.2007,  14:29 Найти цитируемый пост)
что за интерфейс такой Processor и что за класс AuthenticationFilter?

"Крокодил и солнце...  Оооо... Это самый страшный день в моей жизни! Просыпаюсь я как-то под чудо-деревом.... В ХЛАМ!!! Смотрю! - на небе два солнца! Одно такое.. с загнутыми лучами... немецкое!"(с)
С него и начнём:
Processor. В статье он не описан, но. Скорее всего, исходя просто из логики примера - это должен быть просто интерфейс-маркер. Который показывает, что данный класс у нас тоже может являтся процессором входящего запроса.
Но, судя по логике и назначению, в интерфейсе должен быть один важный метод, который делает его не только маркером, но и, собббсно, процессором:
public void execute(ServletRequest req, ServletResponse res) throws IOException, ServletException 
Кто бы у нас там не был процессором и что бы он не делал - мы знаем, что если кто-то у нас является процессором(имплементит интерфейс) - то мы зовём его execute() - и пусть себе "процессит" наш запрос. То есть процессор - это звено в цепи обработки - все они одинаковые снаружи - можем добавить новое или убрать парочку.

В примере так и пишут:
Цитата

Example 7.2 Implementing a Filter - Core Processor


И погнали реализацию конкретного фильтра(процессора):
Код

public class CoreProcessor implements Processor {
......


Ну и, кроме того, ещё у них всех есть конструктор, который может принимать в качестве аргумента другой фильтр
(не обязательно такой же класс, а класс с таким же интерфейсом processor)



"А второе - наше!.... В виде звезды! Звезда.. по имени Солнце! всё просто... даа.... вот"(с)
AuthenticationFilter - это, ещё одно звено. Один из процессоров. Авторы, очевидно, посчитали что название говорит самоза себя. То есть, это очередное звено в цепи, как пример - функциональностью его является - аутентификация.
Показывать нюансы аутентификации и кучу всякой специфики некой абстрактной системы посчитали ненужным. Да оно и вправду перегрузило бы пример.
Сделали по принципу: что делает - из названия ясно, необходимо будет - читатель сам реализует мелочи аутентификации при необходимости. Тем более, у каждого может быть по-разному оформлена.


Цитата(batigoal @  23.1.2007,  09:30 Найти цитируемый пост)
chief39, это 5+ !!! 

"Всё началось с ЧУДО-дерева. Иду я как-то по просёлку - ГЛЯ! - чудоо.... ну, тогда это ещё был куст... но потооом.. всё выыыросло.. плодов стало бооольше - ЧУДО-ДЕРЕВО. Так я стал детским... ПИИИ-сателем!"(с)
smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)