GlassFish:如何设置Access-Control-Allow-Origin标头

gau*_*rav 5 glassfish java-ee-6 glassfish-3

我使用的是最新版本的GlassFish.我想在响应中设置Access-Control-Allow-Origin标头,以便可以从任何域调用我在GlassFish上托管的API.但我无法找到设置它的位置.

Han*_*ank 16

在我的例子中,API请求由Jersey专门处理,因此我可以在以下位置设置响应头ContainerResponseFilter:

package my.app;

import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;

public class CrossOriginResourceSharingFilter implements ContainerResponseFilter {

    @Override
    public ContainerResponse filter(ContainerRequest creq, ContainerResponse cresp) {

        cresp.getHttpHeaders().putSingle("Access-Control-Allow-Origin", "*");
        cresp.getHttpHeaders().putSingle("Access-Control-Allow-Credentials", "true");
        cresp.getHttpHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
        cresp.getHttpHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type, Accept");

        return cresp;
    }
}
Run Code Online (Sandbox Code Playgroud)

过滤器在web.xml中启用:

<servlet>
    <servlet-name>Gateway Servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
        <param-value>my.app.CrossOriginResourceSharingFilter</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)

如果你不使用Jersey,我想你可以创建一个类似的servlet响应过滤器.


小智 9

这样做的最好和最简单的方法是右键单击该项目

在项目中创建新的

并选择跨源资源共享过滤器

创建新的跨源过滤器

  • 如果条目不在上下文菜单中,请选择"其他...",然后通过键入"cross"过滤选项列表.从现在开始,您可以按照Leonardo所描述的上下文菜单访问它. (2认同)