3 октября 2011 г.

Фильтры в web-приложениях

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

Фильры запроса могут использоваться для: проведения дополнительных проверок безопасности, форматирования заголовка или тела запроса, ведения логов и т.д.
Фильтры ответа могут использоваться для: сжатия выходного потока, дополнять или подменять выходной поток и т.д.
И фильтр запроса, и фильтр ответа используют при реализации  один интерфейс – Filter.

Пример декларации фильтра в дескрипторе развертывания:

    MyAppRequest
    com.example.myapp.myappRequest
    
        LogFileName
        UserLog.txt
    


    MyAppRequest
    *.do

Вместо <url-pattern> можно было указать <servlet-name> и использовать фильтр к какому-то конкретному сервлету.

Реализация фильтра для данного примера может быть такой:
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() {}
}

1 комментарий:

Примечание. Отправлять комментарии могут только участники этого блога.