问题Resteasy 3.09 CorsFilter

时间:2015-04-01 10:53:14

标签: java jax-rs cors resteasy

我尝试使用Resteasy 3.0.9中提供的新CorsFilter。我在本页底部找到了一个示例: Ajax request with JAX-RS/RESTEasy implementing CORS

如果我在方法getSingletons()Application子类)中定义此过滤器,则我的资源不再被扫描。这意味着不会找到任何资源并发生以下错误:

  

javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures

在下一页我找到了一个描述: javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures

  

但基本上,此部署选项的作用是扫描应用程序的@ Path,@ Extider等注释。原因是JAX-RS将首先分别在重写的getClasses()和getSingletons()中查找类和对象。如果然后返回空集,则告诉JAX-RS进行扫描(根据规范)。

如果我覆盖getSingletons()方法,那么JAX-RS不进行扫描?是否有其他方法可以配置此CorsFilter并启用资源扫描?

1 个答案:

答案 0 :(得分:30)

  

"是否有其他方法可以配置此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;
    }  
}

此功能将像所有其他@Provider@Path一样进行扫描。

仅用

进行测试
@ApplicationPath("/api")
public class RestApplication extends Application {
}
  

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!