puz*_*ste 16 java jax-rs resteasy cors
我尝试使用CorsFilter
Resteasy 3.0.9中提供的新功能.我在本页底部找到了一个示例:
使用JAX-RS/RESTEasy实现CORS的Ajax请求
如果我在方法getSingletons()
(Application
子类)中定义此过滤器,那么我的资源不再被扫描.这意味着将找不到资源并发生以下错误:
javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures
在下一页我找到了一个描述: javax.ws.rs.NotFoundException:找不到完整路径的资源错误Occures
但基本上,此部署选项的作用是扫描应用程序的@ Path,@ Extider等注释.原因是JAX-RS将首先分别在重写的getClasses()和getSingletons()中查找类和对象.如果然后返回空集,则告诉JAX-RS进行扫描(根据规范).
所以如果我覆盖这个getSingletons()
方法,JAX-RS不会进行扫描?有没有其他方法来配置它CorsFilter
并启用资源扫描?
Pau*_*tha 32
"还有另一种方法来配置这个CorsFilter并启用资源扫描吗?"
保持扫描的一种方法就是实现一个 javax.ws.rs.core.Feature
import javax.ws.rs.core.Feature;
import javax.ws.rs.core.FeatureContext;
import javax.ws.rs.ext.Provider;
import org.jboss.resteasy.plugins.interceptors.CorsFilter;
@Provider
public class CorsFeature implements Feature {
@Override
public boolean configure(FeatureContext context) {
CorsFilter corsFilter = new CorsFilter();
corsFilter.getAllowedOrigins().add("*");
context.register(corsFilter);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
与其他所有@Provider
s和@Path
s 一样,此功能将被扫描.
仅测试
@ApplicationPath("/api")
public class RestApplication extends Application {
}
Run Code Online (Sandbox Code Playgroud)
C:\>curl -i http://localhost:8080/api/simple -H "Origin:stackoverflow.com" HTTP/1.1 200 OK Date: Wed, 01 Apr 2015 12:07:22 GMT Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: stackoverflow.com Content-Type: application/octet-stream Content-Length: 15 Server: Jetty(9.2.4.v20141103)
Hello Response!