我尝试使用CorsFilterResteasy 3.0.9中提供的新功能。
CorsFilter
如果我在getSingletons()(Application子类的)方法中定义了此过滤器,则不会再扫描我的资源。这意味着将找不到资源,并且会发生以下错误:
getSingletons()
Application
javax.ws.rs.NotFoundException: Could not find resource for full path Error Occures
在下一页上,我找到了描述: javax.ws.rs.NotFoundException:找不到完整路径的资源错误发生
但基本上,此部署选项的作用是扫描应用程序的@ Path,@ Provider等注释。 原因是JAX- RS将首先在覆盖的getClasses()和getSingletons()中分别查找类和对象。如果然后返回空集,这将告诉JAX- RS进行扫描(按照规范)。
因此,如果我覆盖该getSingletons()方法,JAX-RS不会进行扫描?还有其他方法可以配置它CorsFilter并启用资源扫描吗?
“还有另一种方法来配置此CorsFilter并启用资源扫描吗?”
保持扫描的一种方法就是实施 javax.ws.rs.core.Feature
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; } }
与其他所有@Providers和@Paths 一样,将扫描此功能。
@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!
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!