Java 在Jersey REST API中为CORS配置Web.xml
我已经创建了RESTWeb服务,并希望启用CORS。 我已经在API的代码中添加了以下代码Java 在Jersey REST API中为CORS配置Web.xml,java,rest,jersey-2.0,Java,Rest,Jersey 2.0,我已经创建了RESTWeb服务,并希望启用CORS。 我已经在API的代码中添加了以下代码 package RestClient; import java.io.IOException; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.container.ContainerRespons
package RestClient;
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;
public class CORSResponseFilter
implements ContainerResponseFilter {
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
MultivaluedMap<String, Object> headers = responseContext.getHeaders();
headers.add("Access-Control-Allow-Origin", "*");
headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
headers.add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia");
}
}
package-RestClient;
导入java.io.IOException;
导入javax.ws.rs.container.ContainerRequestContext;
导入javax.ws.rs.container.ContainerResponseContext;
导入javax.ws.rs.container.ContainerResponseFilter;
导入javax.ws.rs.core.MultivaluedMap;
公共类CORSResponseFilter
实现ContainerResponseFilter{
公共无效筛选器(ContainerRequestContext requestContext、ContainerResponseContext responseContext)
抛出IOException{
多值映射头=responseContext.getHeaders();
headers.add(“访问控制允许原点”、“*”);
添加(“访问控制允许方法”、“获取、发布、删除、放置”);
headers.add(“访问控制允许头”、“X-request-With、内容类型、X-Codingpedia”);
}
}
为了便于访问,我需要在web.xml文件中设置上述类。这是我的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>GenerateToken</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>JAVA WS</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>RestClient</param-value>
</init-param>
<init-param>
<param-name>org.glassfish.jersey.servlet.ContainerResponseFilters</param-name>
<param-value>RestClient.CORSResponseFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAVA WS</servlet-name>
<url-pattern>/Test/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>GenerateToken</web-resource-name>
<url-pattern>/Test/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
发电站
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
JAVA WS
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
RestClient
org.glassfish.jersey.servlet.ContainerResponseFilters
RestClient.CORSResponseFilter
1.
JAVA WS
/试验/*
发电站
/试验/*
保密的
我只是想知道,我是否为CORS配置了正确的web.xml文件?在我的本地环境中,它可以正常工作,但在我为每个人部署它之前,我只想确定它是否正确
有人能给你一些建议吗?你不需要这个(甚至都不正确)
谢谢分享。你能澄清我的一个疑问吗?我想知道,请求如何首先到达允许跨平台访问的CORSResponseFilter类,然后到达我的api代码类令牌。。。?我的意思是谁把他们一个接一个地带去上课(按优先顺序)。因为在web.xml中,只写包名,包名可以包含多个类。就像在我的例子中,它是两个一个用于API的代码,第二个是在问题中提到的。。!(如果我的问题没有任何意义,请麻烦)浏览器将向服务器发出选项请求,并且不会浏览资源。它将直接进入过滤器。这是实际请求之前的飞行前请求。当浏览器获得标题时,它将发送真正的请求,该请求将到达您的资源。资源用完后,再次点击过滤器OK..在飞行前请求中,它进入过滤器。在我的例子中,它是CORSResponseFilter,那么该请求如何知道它需要作为filter方法中的一个参数。第二,在filter方法中作为参数放置之后,没有返回类型(Void)。那么,如何以及谁将响应发送回客户机(调用者)?Jersey调用filter方法并将上下文和飞行前请求的响应发送回客户机。。。?
<init-param>
<param-name>org.glassfish.jersey.servlet.ContainerResponseFilters</param-name>
<param-value>RestClient.CORSResponseFilter</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>RestClient</param-value>
</init-param>