Cross Origin Resource Sharing (Revisitando)

En la entrada sobre Filtros e Interceptores se abordaba el problema de CORS con dos enfoques: utilizando filtros o  interceptores. Existe al menos otra solución razonablemente genérica para un desarrollo con CXF que es utilizar un provider ajustado.
En la entrada anterior, configurando el servidor en una clase "spring flavour":
jaxRSServerFactoryBean.setProviders(Arrays.asList(new JacksonJsonProvider(), new CorsProvider()));
Añadimos nuestro provider, CorsProvider, cuyo código puede ser:

@Provider
public class CorsProvider implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
            throws IOException {
        MultivaluedMap<String, Object> headers = responseContext.getHeaders();
        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
        headers.add("Access-Control-Allow-Headers", "Content-Type");
    }
}
Y así obtenemos una tercera forma de solucionar el CORS.
Existe alguna forma más, añadiendo alguna libreria extra de cxf security, que para una situación sencilla puede ser excesiva y Spring nos proporciona alguna alternativa elegante si estamos en un proyecto de spring-boot.
Spring-boot va a cambiar el modo de la programación java, en el sentido de que vamos a dejar de escribir código y vamos a empezar a buscar la anotación o configuración que nos resuelve el problema.



Comentarios