我在web应用工作包括UI的角度,服务器的Java,RestEasy的3.0.9.Final休息API调用否“访问控制允许来源”标头出现在所请求的资源 - RestEasy的
当我试图访问从另一个域中的其他服务我得到以下错误
无法加载回应预检要求未通过访问控制检查:没有“访问控制允许来源”标头出现在请求的资源。因此不允许访问原产地'http://localhost:8080'。
我配置我的服务器端与跨域调用作出反应,这正与GET呼叫,但POST调用正在创建错误
的web.xml
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>com.test.sample.app.CorsFeature</param-value>
</context-param>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.sample.app.Application</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
服务类
@GET
@Path("/getnameAtt")
@Produces(MediaType.APPLICATION_JSON)
public Response getHostnameAttributes() {
return Response
.status(200)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Headers",
"origin, content-type, accept, authorization")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS, HEAD")
.header("Access-Control-Max-Age", "1209600")
.entity(new TestImpl().getHostNameAttributes())
.build();
}
@POST
@Path("/getSeq")
@Produces(MediaType.APPLICATION_JSON)
public Response getCurrentSequence(String request) {
return Response
.status(200)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Headers",
"origin, content-type, accept, authorization")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS, HEAD")
.header("Access-Control-Max-Age", "1209600")
.entity(new TestImpl().getCurrentSeq(request))
.build();
}
由于我是新来的restea系统无法弄清楚为什么这不起作用。 任何帮助将不胜感激。等待你的答复。
谢谢
感谢您的回复。使用过CorsFilter并用@Provider注释。但是那个班甚至没有打电话。我是否需要在web.xml中添加任何内容 – user3595995
如果您正在扫描资源,那么我链接的示例就是用于此目的。如果你明确地注册了所有的资源和提供者,那么你可以在'Application'类中注册'CorsFilter'。或者注册“特征”。无论哪种方式工作。虽然“特征”不是必需的。如果预检请求是显式的,还是由浏览器在内部处理,那么您可以在'Application'类 –
中将'CorsFilter'注册到'getSingletons()'的重写中?在发送实际请求之前,是否必须先发送OPTION预检请求?我被困在类似的错误。 –