Recibo el error típico de Cors en la interfaz de usuario. Por motivos de prueba, quiero desactivarlo por completo. Lo que me parece extraño es que obtengo 200 y puedo ver el "Hola mundo" en la respuesta en la depuración de Chrome, pero obtengo:

Acceso a XMLHttpRequest en 'http: // localhost: 8101 / app / services / rest / user' de origen 'http: // localhost: 8000' ha sido bloqueado por la política de CORS: No El encabezado 'Access-Control-Allow-Origin' está presente en el recurso.

Tengo este frijol

 <jaxrs:server id="processServices" address="/">
    <jaxrs:serviceBeans>
       <ref bean="userServiceBean"/>
    </jaxrs:serviceBeans>
 </jaxrs:server>

 <bean id="userServiceBean" class="com.package.services.UserService"/> 

Y un servicio básico:

@Service("processUserService")
public class UserService {

    @GET
    @Path("/user")
    public String getUser() {
        return "Hello World"
    }
}

Vi en el stackoverflow y me dijeron que usaran

import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;

@Provider
public class CORSFilter implements ContainerResponseFilter {

   @Override
   public void filter(final ContainerRequestContext requestContext,
                      final ContainerResponseContext cres) throws IOException {
      cres.getHeaders().add("Access-Control-Allow-Origin", "*");
      cres.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
      cres.getHeaders().add("Access-Control-Allow-Credentials", "true");
      cres.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
      cres.getHeaders().add("Access-Control-Max-Age", "1209600");
   }
}

Pero sigue siendo el mismo error. He depurado y no se está llamando a este método.

¿Qué me estoy perdiendo aquí?

1
Tiago Silva 2 oct. 2019 a las 18:30

1 respuesta

La mejor respuesta

Debe registrar este proveedor en su servidor.

Algo así como:

<jaxrs:server id="processServices" address="/">
    <jaxrs:serviceBeans>
       <ref bean="userServiceBean"/>
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <ref bean="corsfilterProvider" />
    </jaxrs:providers>
 </jaxrs:server>

 <bean id="corsfilterProvider" class="your.filters.full.name"/>
 <bean id="userServiceBean" class="com.package.services.UserService"/> 
0
Dancrumb 2 oct. 2019 a las 15:45