Обработка запросов / ответов в классе javax.servlet.filter - PullRequest
1 голос
/ 15 января 2012

Как определить, будет ли запрос / ответ обрабатываться классом фильтра?Также мне нужно отменить запрос к сервлету и создать собственный ответ и вернуть его из метода dofilter.Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 15 января 2012

Каждый фильтр может влиять ни на один, ни на один или оба запроса и ответа.Все зависит от того, делаете ли вы что-либо до и / или после вызова chain.doFilter(...) - и передаете ли вы упакованный запрос и / или ответ.

Если вам нужно создать свой собственный ответ в фильтре, простоне звоните chain.doFilter(...) и предоставьте свой ответ от фильтра.

Пожалуйста, обратитесь к Filter.doFilter Javadocs , включая:

Типичныйреализация этого метода будет следовать следующей схеме: - 1. Изучить запрос 2. При желании обернуть объект запроса пользовательской реализацией для фильтрации содержимого или заголовков для фильтрации ввода 3. При желании обернуть объект ответа пользовательской реализацией для фильтрации содержимого илизаголовки для выходной фильтрации 4. a) Либо вызовите следующую сущность в цепочке, используя объект FilterChain (chain.doFilter ()), 4. b), либо не передавайте пару запрос / ответ следующей сущности в цепочке фильтров, чтобызаблокировать обработку запроса 5. Непосредственно установить заголовки в ответе после вызова следующего объекта в файлетер цепь.

0 голосов
/ 16 января 2012

Я передал ответ, используя response.getWriter (). Write ("данные ответа"); И избежал передачи ответа сервлету, удалив эту chain.doFilter ();

Теперь я проверяю переменные сеанса (для аутентификации) из метода doFilter. Поскольку и запросы, и ответы обрабатываются в одном и том же методе doFilter, я думаю, что проверка этих сеансов происходит 2 раза (1.), в то время как запрос выполняется и (2.) во время ответа. Но как найти то, что doFilter в настоящее время обрабатывает (запрос / ответ)? Так что я могу сделать проверку сеанса только во время запроса.

...