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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章