1. 程式人生 > >Java Web 學習筆記之十二:JBoss RestEasy處理跨域OPTIONS請求方式

Java Web 學習筆記之十二:JBoss RestEasy處理跨域OPTIONS請求方式

跨域請求問題

前提

  • 前後端分離的B/S架構系統
  • 前後端獨立開發,後端採用JBoss restEasy 框架搭建restful服務
  • 後端程式碼開發完成並且部署在某一臺測試機上
  • 前端開發過程中,需要本地除錯程式碼,並且後端服務不在本機上而是在測試機上的時候會出現瀏覽器跨域請求的問題
  • 後端已經新增攔截器並且在攔截器中配置了allowedOrigins, allowedMethods, allowCredentials等引數

解決方式

  • 瀏覽器在傳送跨域請求時候,一般會先發送OPTIONS請求檢驗請求資源是否可以獲取
  • 後端服務需要定義處理options請求方法的介面
  • 因此需要在rest api中定義options處理的介面, 該介面檢測並響應@Path(“/{path:.*}”)的所有請求路徑
/**
 * 跨域請求傳送options請求時候進行處理
 *
 * @param requestMethods
 * @param requestHeaders
 * @return
 * @throws Exception
 */
@OPTIONS
@Path("/{path:.*}")
public Response handleCORSRequest(@HeaderParam("Access-Control-Request-Method") final String requestMethods,
        @HeaderParam("Access-Control-Request-Headers") final
String requestHeaders) throws Exception { Response.ResponseBuilder builder = Response.ok(); if (requestHeaders != null) builder.header("Access-Control-Allow-Headers", requestHeaders); if (requestMethods != null) builder.header("Access-Control-Allow-Methods", requestMethods); return
builder.build(); }