2010-12-09 13 views
5

En UrlMappings.groovy, configuré "500"(controller:'error', action:'error') para que mi propio controlador de errores (y vista) se use.Cómo configurar grails para mostrar siempre su propia página de error en el estado 500

lo general, funciona, sin embargo, cuando he intentado la manipulación de la entrada de la solicitud (la presentación de un parámetro con un tamaño de 1 MB), que tiene un Tomcat genera página de error con estado HTTP 500.

Primero pensé que este error sólo se generó por Tomcat para que Grails no pudiera hacer nada al respecto, pero la Excepción es org.springframework.web.util.NestedServletException (Excepción anidada java.lang.StackOverflowError) y hay muchas org.codehaus.groovy.grails Clases empaquetadas en el seguimiento de la pila.

Creo que mostrar esta excepción, incluido el seguimiento de la pila a atacantes potenciales, es peligroso, entonces, ¿cómo puedo configurar Grails para que siempre muestre mi propia página de error? ¿O solo es posible configurar eso en Tomcat?

Respuesta

3

Es posible que este sea un error de Grails. Encontré this Nabble thread que me dirigió a this JIRA issue. Ese problema se resolvió, pero en los comentarios Peter Ledbrook se vinculó a un different JIRA issue que puede ser o no su problema.

Si eso parece lo que está sucediendo para usted, hay una solución sugerida en los comentarios, que se puede encontrar en here. El error en sí está programado para ser reparado en 1.4; la solución de solución anterior está dirigida a 1.3

+0

Me gustaría probar la solución, pero cuando ejecuto "grails install-plugin myFolder/grails-error-pages-fix.zip" grails parece buscarlo en línea en lugar de usar la versión local. Y no está disponible a través del repositorio estándar ... solo está aquí en github: https://github.com/alkemist/grails-error-pages-fix ¿Alguna idea de cómo puedo instalarlo? –

+0

Probablemente pueda descargar la fuente (el botón Descargar en la esquina superior derecha), extraerla, compilarla y luego instalar el complemento con la distribución distribuible. No puedo decir que haya instalado un plugin de Grails de Github, así que me temo que no soy el mejor para instruirlo. Pero tal vez alguien más pueda entrar. –

+0

Lo tengo ahora usando "install-plugin http://download.github.com/alkemist-grails-error-pages-fix-303f215.zip". Pero el instalador falla al decir "¡No se encontró el descriptor plugin.xml!" (y realmente no está allí). Supongo que no es un plug-in real, sino que debe integrarse manualmente en el proyecto ... –

1

Estoy de acuerdo con Rob Hruska, habiendo tropezado con la mayoría de sus enlaces yo mismo.

yo también sospecho que los Grails-error-páginas-FIX plug-in debería solucionar el problema - como el grailsWebRequest servlet por defecto no tiene un <dispatcher>ERROR</dispatcher> asignados en web.xml.

La técnica utilizada con este complemento básicamente hace lo mismo que la técnica que sugerí en un previous post. (Sin embargo, mis propias pruebas, como se puede ver por mis comentarios allí, no han llevado a resultados constantes aún).

Por último, una cosa que funcionaría en cualquier caso es implementar un custom servlet Filter.

+0

+1 Para el filtro personalizado, lo hago en la mayoría de mis aplicaciones, ya que proporciona más control (en lugar de dejar que el contenedor maneje los errores por usted). –

Cuestiones relacionadas