问题不安 3.09 CorsFilter

2022-09-02 19:55:40

我尝试使用Resteasy 3.0.9中可用的新功能。我在这个页面的底部找到了一个例子:Ajax request with JAX-RS/RESTEasy实现CORSCorsFilter

如果我在方法(子类)中定义了这个过滤器,那么我的资源就不会再被扫描了。这意味着找不到任何资源,并且会发生以下错误: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 执行扫描(根据规范)。

所以如果我覆盖了该方法,JAX-RS不会进行扫描?有没有另一种方法可以配置它并启用资源扫描??getSingletons()CorsFilter


答案 1

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

此功能将像所有其他 s 和 s 一样被扫描。@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!


答案 2