【发布时间】:2021-11-04 21:17:48
【问题描述】:
我正在使用 Jersey 3.0.2 在 Eclipse 中编写 Java Web 服务。我可以在 Postman 中看到 json 主体。我需要添加一个 Access-Control-Allow-Origin 标头,但它没有通过。
这是我的基类:
package net.codejava.ws;
import java.util.logging.Logger;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
@Path("/myhello")
public class HelloResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
@CORSFilterNameBinding
public CelToFar getHelloJSON() {
Logger log = Logger.getGlobal();
log.severe("INSIDE HelloResource.getHelloJSON!");
return new CelToFar();
}
}
我有一个名称绑定类:
package net.codejava.ws;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import jakarta.ws.rs.NameBinding;
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface CORSFilterNameBinding {}
这是它所指的过滤器类:
package net.codejava.ws;
import java.io.IOException;
import java.util.logging.Logger;
import jakarta.ws.rs.container.ContainerRequestContext;
import jakarta.ws.rs.container.ContainerResponseContext;
import jakarta.ws.rs.container.ContainerResponseFilter;
@CORSFilterNameBinding
public class CORSFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
Logger log = Logger.getGlobal();
log.severe("INSIDE FILTER!");
responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
responseContext.getHeaders().add("X-Powered-By", "Jersey :-)");
}
}
我看到“INSIDE HelloResource.getHelloJSON!”在 Eclipse 服务器控制台中就好了,但没有看到内部过滤器的日志字符串。我使用官方文档 (https://eclipse-ee4j.github.io/jersey.github.io/documentation/latest3x/filters-and-interceptors.html) 作为参考。任何帮助将非常感激。谢谢
【问题讨论】: