2015-10-17 2 views
1

Я читаю о Java Filters, я понял, что это реализация и как ее использовать, Но я не знаю, почему мы ее используем. Как я читаю Фильтры, используемые для фильтрации URL-адресов для сохранения/защиты ресурсов от незаконного доступа. Но я смущен тем, что мы можем сделать это с сеансом, а затем почему фильтры? После прочтения полной детали от here. У меня есть этот абзац, который слишком близок, чтобы очистить мою концепцию.Насколько полезны фильтры сервлетов Java

В последней статье мы узнали, как мы можем управлять сессии в веб- приложения, и если мы хотим, чтобы убедиться, что ресурс доступен только тогда, когда пользователь сессии действительно, мы можем достичь этого с помощью сервлетов сессии атрибутов. Этот подход прост, но если у нас есть много сервлетов и jsps, то его будет сложно поддерживать из-за избыточного кода . Если мы хотим изменить имя атрибута в будущем, мы должны будем изменить все места, где у нас есть сеанс .

Ознакомимся с концептуальной базой концепции абзаца, но может ли кто-нибудь показать мне пример программы, которая показывает фильтры, действительно полезные для сервлетов Java. Как веб-приложение или ресурсы могут влиять с фильтрами и без них?

+0

Блог ошибочно написан, и вы поняли его по-другому. –

+0

@ sᴜʀᴇsʜᴀᴛᴛᴀ вы можете очистить мое замешательство, пожалуйста? почему нам нужны/использовать сервлеты? – UnKnown

+0

Короткий ответ - отфильтровать запросы, и длинный ответ займет последний час, чтобы объяснить;) Всегда читайте официальные документы –

ответ

-1

Одним из преимуществ фильтров является то, что вы можете применить фильтр к множеству сервлетов вместо того, чтобы писать один и тот же код в каждом сервлете, который у вас есть.

Редактировать: во избежание путаницы вы не применяете фильтр непосредственно для сервлета, а для URI.

4

Предположим, у вас есть большой webapp с 300 сервлетами, и 250 из них могут быть доступны только в том случае, если вы прошли аутентификацию. Для того, чтобы предотвратить неавторизованный доступ пользователя к этим 250 сервлетов, вы бы, в каждом из этих сервлетов, чтобы повторить следующий псевдокод:

if (!currentUser.isAuthenticated()) { 
    throw new ForbiddenException(); 
} 

И при введении 251th сервлет, у вас есть большой шанс забыть чтобы добавить эту проверку.

Фильтр позволяет говорить о контейнере: для всех запросов, идущих до /private/*, выполните следующий фильтр перед вызовом сервлета, сопоставленного с URL-адресом.

Затем вы можете забыть о проверке подлинности в 250 сервлетах и ​​сделать это один раз и только один раз в фильтре.

Конечно, есть и другие примеры использования: проверка авторизации, ведение журнала, измерение производительности и т.д.

+0

@JBNizat, Когда я читаю Фильтры, автоматически вызываемые перед сервлетами. Но предположим, у меня есть два или более фильтра, как они подключены к сервлетам? означает, какой фильтр вызывается, для какого сервлета? – UnKnown

+0

Подобно тому, как сервлеты сопоставляются с URL-адресами, фильтры также. Вы также можете сопоставить фильтр с сервлетом, что означает, что фильтр вызывается всякий раз, когда выполняется запрос к этому сервлету. –

+0

Лучше иметь один фильтр, чем 250 сервлетов, это кошмар. –

0

Фильтры вызываются перед любым сервлета. Это основное различие. Хорошим примером фильтра является фильтр Struts2.

<filter> 
     <filter-name>struts2</filter-name> 
     <filter-class>org.apache.struts2.dispatcher.filter.ng.StrutsPrepareAndExecuteFilter</filter-class> 
</filter> 
+0

Предположим, что у меня есть сервлет 'A' и Filter' B', как я могу их сопоставить, когда при вызове Servlet 'A' автоматически включается фильтр' B'. – UnKnown

+0

map them '/ *' означает все –

+0

@RomanC, но если бы я использовал любую другую карту вместо '/ *' then? этот фильтр будет ссылаться только на этот url? – UnKnown

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