Фильтр сервлетов Java не передает запрос POST + ZOPE - PullRequest
2 голосов
/ 24 февраля 2012

Я использую Jetty Transparent Proxy Servlet для интеграции с ZOPE (python).Это позволяет мне применять различные java-фильтры, не мешая ZOPE и его расширениям.Мы используем его в основном для аутентификации и назначения привилегий.

Он отлично работает для обычных веб-страниц, обслуживаемых ZOPE (при условии GET-запросов), но не работает при работе с формами POST, размещенными на ZOPE.

Я обнаружил, что запрос правильно передается через цепочку фильтров (в пути еще несколько фильтров), что-то идет не так в конце.Я могу наблюдать, как запрос достигает ZOPE (используя журналы запросов), но ответ никогда не возвращается.У меня ограниченные возможности исследовать что-либо на ZOPE - только смотреть его журнал запросов.

Это не ошибка прокси, потому что, когда все фильтры отключены , все работает нормально.

Могу ли я сделать что-то с объектом запроса / ответа?Я что-то упустил в своих фильтрах?Куда мне еще копать?

Вот урезанный пример фильтра, который я использую.

public class AuthFilter implements Filter{
   @Override
   public void doFilter(ServletRequest req, ServletResponse res,
        FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    HttpSession session = request.getSession();

       String secret = request.getParameter("cessotk");
       if ( secret != null && secret.equals (SECRET_TOKEN ) ){
           log ("Discovered secret user");

           session.setAttribute(AUTH_PARAM, true);
           AuthUser secretUser = new AuthUser();
           secretUser.setUsername("SECRET_SYSTEM_USER");

           session.setAttribute(AUTH_USER_KEY, secretUser );
           chain.doFilter(request, response);
       }
    }
}
...