С помощью фильтров обеспечивается дополнительная прослойка между сервлетом и клиентом. Фильтры могут использоваться как в сторону от клиента к сервлету (фильтры запроса), так и в обратную сторону (фильтры ответа).
Фильры запроса могут использоваться для: проведения дополнительных проверок безопасности, форматирования заголовка или тела запроса, ведения логов и т.д.
Фильтры ответа могут использоваться для: сжатия выходного потока, дополнять или подменять выходной поток и т.д.
И фильтр запроса, и фильтр ответа используют при реализации один интерфейс – 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() {}
}
Спасибо.
ОтветитьУдалитьВ примере декларации фильтра не видно тегов