Añadir Cookies y Headers HTTP en navegaciones de ficheros pages.xml o .page.xml
Modificaciones para tener más opciones para trabajar con Cookies y Headers HTTP.
Cabeceras HTTP
Hasta ahora podiamos añadir Headers HTTP en los ficheros pages.xml o .page.xml de manera global. Ahora lo podemos hacer especificando en que navegaciones o errores se quieren añadir. Además se ha añadido el atributo if (expresión EL) y on-postback (true/false) para poder condicionar si se añade esa cabecera.
Ejemplo de lo que hasta ahora era posible realizar:
<?xml version="1.0" encoding="UTF-8"?> <page xmlns="http://jboss.org/schema/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/seam/pages http://jboss.org/schema/seam/pages-2.3.xsd" login-required="true"> <header name="My-Header" value="mi_header_value" /> </page>
Con esta configuración, se añade la cabecera My-Header en la respuesta de cualquier navegación desde la página actual.
Ejemplo de añadir una cabecera al <redirect>.
<?xml version="1.0" encoding="UTF-8"?> <page xmlns="http://jboss.org/schema/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/seam/pages http://jboss.org/schema/seam/pages-2.3.xsd"> <navigation from-action="#{identity.login}"> <rule if="#{identity.loggedIn}"> <redirect view-id="/${viewid.pagina.principal}"> <header name="My-Header" value="200" /> </redirect> </rule> </navigation> </page>
Con esta configuración, se añade la cabecera My-Header cuando se ejecuta el <redirect>.
Ejemplo de añadir una cabecera al <render>.
<?xml version="1.0" encoding="UTF-8"?> <page xmlns="http://jboss.org/schema/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/seam/pages http://jboss.org/schema/seam/pages-2.3.xsd"> <navigation from-action="#{identity.login}"> <rule if="#{identity.loggedIn}"> <render view-id="/${viewid.pagina.principal}"> <header name="My-Header" value="200" /> </render> </rule> </navigation> </page>
Con esta configuración, se añade la cabecera My-Header cuando se ejecuta el <render>.
Cabeceras en Excepciones o Errores HTTP
Podemos definir ante excepciones, si queremos realizar una navegacion a una página o devoler un error HTTTP. Estas configuraciones se pueden realizar mediante el fichero pages.xml o mediante anotaciones en clases de Excepción.
Definiciones en pages.xml
Para definir la navegación a una página o devovler un error HTTP en el fichero pages.xml. Ejemplo de navegación como respuesta auna excepción no controlada:
<exception class="org.jboss.seam.security.AuthorizationException"> <redirect view-id="/error.xhtml"> <message severity="error">#{messages['org.jboss.seam.security.AuthorizationException']}</message> </redirect> </exception>
Donde si se produce la excepción org.jboss.seam.security.AuthorizationException navegamos a la página /error.xhtml mostrando un mensaje.
Ejemplo de respuesta con error HTTP:
<exception class="org.jboss.seam.ConcurrentRequestTimeoutException" log-level="trace"> <http-error error-code="503" /> </exception>
Donde si se produce la excepción org.jboss.seam.ConcurrentRequestTimeoutException se devuelve el error HTTP 503.
Ahora podemos además, añadir cabeceras HTTP en las respuestas:
<exception class="org.jboss.seam.security.AuthorizationException"> <redirect view-id="/error.xhtml"> <message severity="error">#{messages['org.jboss.seam.security.AuthorizationException']}</message> <header name="My-Header-redirect" value="200" /> </redirect> </exception> <exception class="org.jboss.seam.ConcurrentRequestTimeoutException" log-level="trace"> <http-error error-code="503"> <header name="My-Header-redirect" value="200" /> </http-error> </exception>
Definiciones en Clases JAVA
Ahora vamos a ver el equivalente mediante anotaciones. Para realizar una navegación como respuesta a una excepción no tratada, usamos la @Redirect. Ahora tenemos disponible la propiedad headers, que nos permite añadir anotaciones @Header, con los datos de la cabecera. Ejemplo:
package es.um.atica.prueba.exceptions; import org.jboss.seam.annotations.exception.Cookie; import org.jboss.seam.annotations.exception.Header; import org.jboss.seam.annotations.exception.Redirect; @Redirect( viewId = "/paginas/home.seam", headers = { @Header(name = "annotation_header", value = "#{cookieManager.value}") }) public class RedirectException extends RuntimeException { }
Cuando se lance la excepción es.um.atica.prueba.exceptions.RedirectException y no sea tratada, automaticamente se realizara una navegación a la página /paginas/home.seam y en la respuesta se añade la cabecera annotation_header.
Para devolver un error HTTP ante una excepción no tratada, utilizamos la anotación @HttpError.Ahora tenemos disponible la propiedad headers, que nos permite añadir anotaciones @Header, con los datos de la cabecera. Ejemplo:
package es.um.atica.prueba.exceptions; import org.jboss.seam.annotations.exception.Cookie; import org.jboss.seam.annotations.exception.Header; import org.jboss.seam.annotations.exception.Redirect; @HttpError( errorCode = 503, message = "#{messages['my.error.menssage']}" headers = { @Header(name = "annotation_header", value = "#{cookieManager.value}") }) public class HttpErrorException extends RuntimeException { }
Cuando se lance la excepción es.um.atica.prueba.exceptions.HttpErrorException y no sea tratada, automaticamente se devuelve el error HTTP 503 y en la respuesta se añade la cabecera annotation_header.
Atributos
Los atributos de la etiqueta <header> son los siguientes:
- name : es obligatorio y permite añadir cualquier cadena de caracteres sin espacios al inicio y al final.
- value : permite añadir cualquier cadena de caracteres sin espacios al inicio y al final o una expresion EL.
- if : condición a cumplir para incluir la cabecera en la respuesta. Por defecto valor true. Admite los valores true, false o una expresión EL que devuelva un balor booleano.
- on-postback : indica si se añade la cabecera en la respuesta a una petición POST. Por defecto valor true. Admite los valores true, false.
Cookies HTTP
Hasta ahora NO podiamos añadir Cookies HTTP en los ficheros pages.xml o .page.xml. Ahora lo podemos hacer de manera global a una página o especificando en que navegaciones o errores se quieren añadir. Además se ha añadido el atributo if (expresión EL) y on-postback (true/false) para poder condicionar si se añade esa cabecera.
Ejemplo de uso para añadir cookie a de manera global a una página:
<?xml version="1.0" encoding="UTF-8"?> <page xmlns="http://jboss.org/schema/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/seam/pages http://jboss.org/schema/seam/pages-2.3.xsd" login-required="true"> <cookie name="My-Cookie" value="mi_cookie_value" /> </page>
Con esta configuración, se añade la cookie My-Cookie en la respuesta de cualquier navegación desde la página actual.
Ejemplo de añadir una cabecera al <redirect>.
<?xml version="1.0" encoding="UTF-8"?> <page xmlns="http://jboss.org/schema/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/seam/pages http://jboss.org/schema/seam/pages-2.3.xsd"> <navigation from-action="#{identity.login}"> <rule if="#{identity.loggedIn}"> <redirect view-id="/${viewid.pagina.principal}"> <cookie name="My-Cookie" value="mi_cookie_value" /> </redirect> </rule> </navigation> </page>
Con esta configuración, se añade la cookie My-Cookie cuando se ejecuta el <redirect>.
Ejemplo de añadir una cabecera al <render>.
<?xml version="1.0" encoding="UTF-8"?> <page xmlns="http://jboss.org/schema/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/schema/seam/pages http://jboss.org/schema/seam/pages-2.3.xsd"> <navigation from-action="#{identity.login}"> <rule if="#{identity.loggedIn}"> <render view-id="/${viewid.pagina.principal}"> <cookie name="My-Cookie" value="mi_cookie_value" /> </render> </rule> </navigation> </page>
Con esta configuración, se añade la cookie My-Cookie cuando se ejecuta el <render>.
Cookies en Excepciones o Errores HTTP
Definiciones en pages.xml
Ahora podemos además, añadir cookies HTTP en las respuestas:
<exception class="org.jboss.seam.security.AuthorizationException"> <redirect view-id="/error.xhtml"> <message severity="error">#{messages['org.jboss.seam.security.AuthorizationException']}</message> <cookie name="My-Cookie-redirect" value="MY_cookie_value" /> </redirect> </exception> <exception class="org.jboss.seam.ConcurrentRequestTimeoutException" log-level="trace"> <http-error error-code="503"> <cookie name="My-Cookie-error" value="MY_cookie_value" /> </http-error> </exception>
Definiciones en Clases JAVA
Ahora vamos a ver el equivalente mediante anotaciones. Para realizar una navegación como respuesta a una excepción no tratada, usamos la @Redirect. Ahora tenemos disponible la propiedad cookies, que nos permite añadir anotaciones @Cookie, con los datos de la cookie. Ejemplo:
package es.um.atica.prueba.exceptions; import org.jboss.seam.annotations.exception.Cookie; import org.jboss.seam.annotations.exception.Header; import org.jboss.seam.annotations.exception.Redirect; @Redirect( viewId = "/paginas/home.seam", cookies = { @Cookie(name = "annotation_cookie", value = "#{cookieManager.value}", path = "/miPath") }) public class RedirectException extends RuntimeException { }
Cuando se lance la excepción es.um.atica.prueba.exceptions.RedirectException y no sea tratada, automaticamente se realizara una navegación a la página /paginas/home.seam y en la respuesta se añade la cookie annotation_cookie.
Para devolver un error HTTP ante una excepción no tratada, utilizamos la anotación @HttpError.Ahora tenemos disponible la propiedad cookies, que nos permite añadir anotaciones @Cookie, con los datos de la cabecera. Ejemplo:
package es.um.atica.prueba.exceptions; import org.jboss.seam.annotations.exception.Cookie; import org.jboss.seam.annotations.exception.Header; import org.jboss.seam.annotations.exception.Redirect; @HttpError( errorCode = 503, message = "#{messages['my.error.menssage']}" cookies = { @Cookie(name = "annotation_cookie", value = "#{cookieManager.value}", path = "/miPath") }) public class HttpErrorException extends RuntimeException { }
Cuando se lance la excepción es.um.atica.prueba.exceptions.HttpErrorException y no sea tratada, automaticamente se devuelve el error HTTP 503 y en la respuesta se añade la cookie annotation_cookie.
Atributos
Los atributos de la etiqueta <cookie> son los siguientes:
- name : es obligatorio y permite añadir cualquier cadena de caracteres sin espacios al inicio y al final.
- value : permite añadir cualquier cadena de caracteres sin espacios al inicio y al final o una expresion EL.
- comment : permite añadir cualquier cadena de caracteres sin espacios al inicio y al final o una expresion EL.
- domain : permite añadir cualquier cadena de caracteres sin espacios al inicio y al final o una expresion EL.
- max-age : permite añadir valores enteros o una expresión EL que devuelva un valor entero, por defecto -1.
- path : permite añadir cualquier cadena de caracteres sin espacios al inicio y al final o una expresion EL. Por defecto “/”.
- secure : permite añadir valores booleanos o una expresión EL que devuelva un valor booleano, por defecto false.
- version : permite añadir valores enteros o una expresión EL que devuelva un valor entero, por defecto 0.
- http-only : permite añadir valores booleanos o una expresión EL que devuelva un valor booleano, por defecto true.
- if : condición a cumplir para incluir la cabecera en la respuesta. Por defecto valor true. Admite los valores true, false o una expresión EL que devuelva un balor booleano.
- on-postback : indica si se añade la cabecera en la respuesta a una petición POST. Por defecto valor true. Admite los valores true, false.
— JUAN MIGUEL BERNAL GONZALEZ 28/01/2020 11:44
- fdw2.0/fundeweb2.0/gt/modificaciones_jboss_seam/cookies_headers_page.txt
- Última modificación: 11/05/2021 12:08
- por JUAN MIGUEL BERNAL GONZALEZ