Forums

Home » Liferay Portal » Español » 3. Desarrollo

Combination View Flat View Tree View
Threads [ Previous | Next ]
Juanjo Meroño
PortalDelegateServlet + InvokerFilter consume peticiones POST
November 21, 2012 1:36 AM
Answer

Juanjo Meroño

Rank: New Member

Posts: 2

Join Date: November 21, 2012

Recent Posts

Estoy tratando de utilizar el PortalDelegateServlet (Liferay 6.1.1), para capturar la información de sesión desde un servlet desplegado en un contexto diferente a ROOT. Todo funciona correctamente, salvo las peticiones POST que ejecuto a través del PortalDelegateServlet. Estas peticiones llegan a mi servlet con el InputStream de datos consumido, por lo que no puedo procesar la petición correctamente. ¿Quién consume este flujo?

Investigando un poco más he notado que el problema reside en el InvokerFilter por el que pasan todas las peticiones del contexto ROOT. Por ejemplo, si colocas este sencillo JSP en ROOT y lo invocas (/test.jsp) muestra un formulario que puedes enviar con POST. El resultado del envío POST muestra el valor del primer byte de datos recibido, que es -1, es decir, alguien ha consumido los datos previamente. Cosa que en principio no debería suceder.

 1<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
 2<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 3<html>
 4<head><title>Testing</title></head>
 5<body>
 6<%    if ("GET".equals(request.getMethod())) { %>
 7<form action="test.jsp" method="post">
 8    <input type="text" name="data" value=""/>
 9    <input type="submit"/>
10</form>       
11<%    } else { %>
12    <h1>This is a post wich first byte of data is: <%=request.getInputStream().read() %></h1><br/>
13<%    } %>
14</body>
15</html>


Si se comenta del web.xml del contexto ROOT el filtro para REQUEST:

1<filter-mapping>
2    <filter-name>Invoker Filter - REQUEST</filter-name>
3    <url-pattern>/*</url-pattern>
4    <dispatcher>REQUEST</dispatcher>
5</filter-mapping>


El jsp se comporta correctamente y el InputStream ya no se consume antes de que sea tratado por este. Muestra el primer byte y no -1. Obviamente el filtro no se puede evitar ya que el mapeo es /* y tampoco he verificado si liferay funciona sin este filtro, pero imagino que no. ¿Es posible que se trate de un bug?, ¿Alguien ha experimentado lo mismo?, ¿Se puede evitar este efecto secundario del InvokerFilter?

Gracias.