Revisamos de forma profundamente cada reseña en nuestra página web con la meta de mostrarte en todo momento información más veraz y actual.
Solución:
No soy un experto en JEE, pero creo que debido a que la propiedad de la cookie es una invención algo nueva, no puede esperar que esté presente en las interfaces o implementaciones de Java EE 7. los Cookie
A la clase le falta un setter para propiedades genéricas, como parece. Pero en lugar de agregar la cookie a su HttpServletResponse
a través de
response.addCookie(myCookie)
simplemente puede configurar el campo de encabezado HTTP correspondiente a través de
response.setHeader("Set-Cookie", "key=value; HttpOnly; SameSite=strict")
Actualizar: Gracias a @mwyrzyk por señalar que setHeader()
sobrescribe todos los encabezados existentes del mismo nombre. Entonces, si sucede que tiene otro Set-Cookie
encabezados en su respuesta ya, por supuesto que usaría addHeader()
con los mismos parámetros en su lugar.
Si no desea actualizar todo su código, también puede lograr lo mismo con una configuración de línea utilizando la configuración de Apache o Nginx (o cualquier otro servidor HTTP/proxy que esté utilizando)
1 Configuración de las cookies de SameSite mediante la configuración de Apache
Puede agregar la siguiente línea a su configuración de Apache
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
y esto actualizará todas sus cookies con SameSite=Lax
bandera
Ver más aquí: https://blog.giantgeek.com/?p=1872
2 Configuración de las cookies de SameSite mediante la configuración de Nginx
location /
# your usual config ...
# hack, set all cookies to secure, httponly and samesite (strict or lax)
proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
Lo mismo aquí, esto también actualizará todas sus cookies con SameSite=Lax
bandera
Vea más aquí: https://serverfault.com/questions/849888/add-samesite-to-cookies-using-nginx-as-reverse-proxy
A partir de hoy (24.01.20) servlet-api
no deja fijar sameSite
attribute a la galleta. Por cierto, hay un ticket en curso (LINK) que lanzará un nuevo (5.0 o 5.1 servlet-api
).
Opción 1: No tienes prisa y puedes esperar servlet-api
versión, donde Cookie
clase y SessionCookieConfig
la clase tiene métodos dedicados para establecer sameSite
attribute.
Opcion 2: Está utilizando una versión antigua de servlet-api
(por ejemplo, 3.1), en consecuencia, la versión anterior de Tomcat (por ejemplo, tengo la situación actual ahora). Significa incluso cuando la comunidad lanza servlet-api
con sameSite
soporte, no puede actualizar su versión de inmediato, ya que puede ser demasiado arriesgado actualizar un par de versiones principales.
En este caso hemos encontrado una solución.
Hay un Cookie Processor Component
LINK en Tomcat, que
El elemento CookieProcessor representa el componente que analiza los encabezados de cookies recibidos en objetos javax.servlet.http.Cookie accesibles a través de HttpServletRequest.getCookies() y convierte los objetos javax.servlet.http.Cookie agregados a la respuesta a través de HttpServletResponse.addCookie() a HTTP encabezados devueltos al cliente.
El uso de este procesador es bastante sencillo. Dentro de context.xml:
...
En este caso, se utiliza la implementación predeterminada del procesador (org.apache.tomcat.util.http.Rfc6265CookieProcessor
), pero puede especificar cualquier otro dentro de un CookieProcessor
attribute className
.
valoraciones y comentarios
Si conservas alguna desconfianza y disposición de mejorar nuestro post puedes escribir una explicación y con mucho gusto lo leeremos.