2012-03-01 19 views
22

Mi webapp está teniendo un problema desde que actualicé a Tomcat 7. Mi sesión irá al null después de iniciar sesión e intentar hacer cualquier cosa (enviar una solicitud). He leído que configurar lo siguiente puede ayudar:Tomcat 7 - ¿Dónde configuro 'propiedades del sistema'?

org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false 

¿Alguien sabe dónde configurar esto? ¿Debe establecerse en web.xml, context.xml o en otro lugar?

La otra cosa que quiero comprobar es la siguiente:

org.apache.catalina.STRICT_SERVLET_COMPLIANCE 
+0

He leído lo siguiente, http://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html y no lo hice ver cualquier información sobre dónde establecer esto. Solo necesito saber cómo configurar correctamente FWD_SLASH_IS_SEPARATOR en falso. – LuckY07

+0

Además, estamos ejecutando en un entorno de Windows. – LuckY07

+0

@Michael - ¿Dónde en RUNNING.txt muestra DÓNDE establecer FWD_SLASH_IS_SEPARATOR? ¿Te refieres a cómo te muestra cómo establecer variables (en Windows) para setenv.bat? – LuckY07

Respuesta

3

LA SOLUCIÓN:

sessionCookiePathUsesTrailingSlash="false" 

En realidad nos dimos cuenta de cómo resolver esto. Era una configuración de Tomcat 7 que necesitábamos establecer. La colocamos en server.xml, bajo la etiqueta de la siguiente manera:

<Context path="/test" reloadable="true" docBase="c:\webapp\test" 
workDir="c:\webapp\test" sessionCookiePathUsesTrailingSlash="false"/> 

Cuando estábamos depuración del problema y mirando a la ruta de las cookies nos dimos cuenta que estaba poniendo una barra invertida \ después del nombre de aplicación web, por lo que para nuestra aplicación web de prueba que estaba estableciendo el camino al /test/ en lugar de /test. Esto causó un montón de problemas.

¿Alguien más ha tenido que lidiar con esta configuración en Tomcat 7? ¿O tienes un problema similar?

3

Puede establecer estas propiedades del sistema en la línea de comandos que inicia Tomcat. Por ejemplo, puede hacer que el archivo setenv.bat (en setenv.sh si estás en Linux) en la carpeta Tomcat bin con los siguientes contenidos:

set "CATALINA_OPTS=%CATALINA_OPTS% -Dfile.encoding=UTF8 -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=true -Duser.timezone=GMT -Xmx1024m -XX:MaxPermSize=256m" 

Este archivo es la forma preferida de configuración de las propiedades para Tomcat.

Ahora, FWD_SLASH_IS_SEPARATOR está configurado de manera predeterminada en false. Si establece STRICT_SERVLET_COMPLIANCE en true, el valor de FWD_SLASH_IS_SEPARATOR también se configurará en true (y los valores de algunas otras propiedades). Sin embargo, puede establecerlo explícitamente en false, p. utilizando la siguiente en el archivo de setenv está bien:

-Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=true 
-Dorg.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false 

Esto es también lo que sugieren cuando alguien establece STRICT_SERVLET_COMPLIANCE a true, para desactivar siempre la FWD_SLASH_IS_SEPARATOR. De lo contrario, el valor de ruta de la cookie se enviará entre comillas (por ejemplo, "\") y todos los navegadores a partir de hoy, excepto Opera, no reconocen esto y por ej. no puede rastrear la sesión.

25

Puede establecer cualquiera de las propiedades del sistema en el archivo

apache-tomcat-7.0.33\conf\catalina.properties 

. Agregar su entrada en este archivo debería resolver su problema.

E.g.

environment=local 
10

Puede establecer Propiedades del sistema en Tom cat creando un archivo setenv.sh en el directorio/bin. He hecho lo siguiente para establecer las propiedades del sistema.

export JAVA_OPTS="-Dmyprojectvar.subname=value -Danothervariable=value -Danother.variable=value" 

Recuerde:

No hay espacio entre el export JAVA_OPTS y = y el símbolo & es diferente, utilice ..

Ahora, ejecute su catalina.sh para iniciar tomcat.

+2

Desafortunadamente no puede establecer valores ** secretos ** (por ejemplo, contraseñas de almacén de confianza) de esa manera sin revelarlos a cualquiera que pueda iniciar sesión y ejecutar 'ps' o leer/proc/*/cmdline. Definirlos en catalina.properties evita esa fuga. Esta es una razón por la cual el uso de propiedades de sistema personalizadas para configurar el código de servlet es una idea mala. Use los parámetros de contexto en su lugar. –

+1

Además de la advertencia formulada por @MarkWood, esta técnica solo funcionará cuando se inicie Tomcat utilizando los scripts de inicio. Si usa otra instalación para iniciar Tomcat (por ejemplo, como un "Servicio" de Microsoft Windows), las secuencias de comandos como 'bin/setenv.sh | bat' se ignoran. El uso de 'catalina.properties' garantiza que las propiedades del sistema se establezcan independientemente de la forma en que se inicie Tomcat. –

1

Si están tratando de establecer las variables de un servidor que ejecuta en Eclipse:

  1. Seleccione Ejecutar> Ejecutar configuraciones
  2. Asegúrese de que se selecciona el servidor
  3. Seleccionar ficha Entorno
  4. Haga clic en 'Nuevo 'para agregar una nueva variable
Cuestiones relacionadas