С помощью фильтров обеспечивается дополнительная прослойка между сервлетом и клиентом. Фильтры могут использоваться как в сторону от клиента к сервлету (фильтры запроса), так и в обратную сторону (фильтры ответа).
Фильры запроса могут использоваться для: проведения дополнительных проверок безопасности, форматирования заголовка или тела запроса, ведения логов и т.д.
Фильтры ответа могут использоваться для: сжатия выходного потока, дополнять или подменять выходной поток и т.д.
И фильтр запроса, и фильтр ответа используют при реализации один интерфейс – Filter.
Пример декларации фильтра в дескрипторе развертывания:
Реализация фильтра для данного примера может быть такой:
Фильры запроса могут использоваться для: проведения дополнительных проверок безопасности, форматирования заголовка или тела запроса, ведения логов и т.д.
Фильтры ответа могут использоваться для: сжатия выходного потока, дополнять или подменять выходной поток и т.д.
И фильтр запроса, и фильтр ответа используют при реализации один интерфейс – Filter.
Пример декларации фильтра в дескрипторе развертывания:
Вместо <url-pattern> можно было указать <servlet-name> и использовать фильтр к какому-то конкретному сервлету.MyAppRequest com.example.myapp.myappRequest LogFileName UserLog.txt MyAppRequest *.do
Реализация фильтра для данного примера может быть такой:
public class myappRequest implements Filter { private FilterConfig fc; private void init(FilterConfig config) throws ServletException { this.fc = config; } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { HttpServletRequest httpReq = (HttpServletRequest) req; String name= httpReq.getRemoteUser(); if( name!= null ) fc.getServletContext().log(“User: “ +name); chain.doFilter(req,resp); } public void destroy() {} }
Спасибо.
ОтветитьУдалитьВ примере декларации фильтра не видно тегов