我在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預檢請求?我被困在類似的錯誤。 –