1.新增RESTCorsResponseFilter.java
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.container.PreMatching;
import javax.ws.rs.ext.Provider;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Provider
@PreMatching
public class RESTCorsResponseFilter implements ContainerResponseFilter {
protected Logger logger = LogManager.getLogger(this.getClass().getName());
@Override
public void filter( ContainerRequestContext requestCtx, ContainerResponseContext responseCtx ) throws IOException {
logger.info( "Executing REST response filter" );
responseCtx.getHeaders().add( "Access-Control-Allow-Origin", "*" );
responseCtx.getHeaders().add( "Access-Control-Allow-Credentials", "true" );
responseCtx.getHeaders().add( "Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS" );
responseCtx.getHeaders().add("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
}
}
2.新增RESTCorsRequestFilter.java
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Provider
@PreMatching
public class RESTCorsRequestFilter implements ContainerRequestFilter {
protected Logger logger = LogManager.getLogger(this.getClass().getName());
@Override
public void filter( ContainerRequestContext requestCtx ) throws IOException {
logger.info( "Executing REST request filter" );
// When HttpMethod comes as OPTIONS, just acknowledge that it accepts...
if ( requestCtx.getRequest().getMethod().equals( "OPTIONS" ) ) {
logger.info( "HTTP Method (OPTIONS) - Detected!" );
// Just send a OK signal back to the browser
requestCtx.abortWith( Response.status( Response.Status.OK ).build() );
}
}
}
3.apache-cxf-services.xml
beans element / jaxrs:server element加上
<ref bean="RESTCorsResponseFilter" />
<ref bean="RESTCorsRequestFilter" />
beans element內加上
<bean id="RESTCorsResponseFilter" class="com.xxx.servlet.RESTCorsResponseFilter"/>
<bean id="RESTCorsRequestFilter" class="com.xxx.servlet.RESTCorsRequestFilter"/>
