keycloak~正確讓api接口支持跨域

相關參考

jax-ws環境的cors

return Response.ok()
         .entity(p)
         .header("Access-Control-Allow-Origin", "*")
         .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT")

keycloak對jax-ws的cors封裝

下面是keycloak源碼中,針對/cert這個接口的跨域請求

@OPTIONS
@Path("certs")
@Produces(MediaType.APPLICATION_JSON)
public Response getVersionPreflight() {
    return Cors.add(request,     Response.ok()).allowedMethods("GET").preflight().auth().build();
}

@GET
@Path("certs")
@Produces(MediaType.APPLICATION_JSON)
@NoCache
public Response certs() {
  // 相關業務代碼
   Response.ResponseBuilder responseBuilder =
        Response.ok().cacheControl(CacheControlUtil.getDefaultCacheControl());
    return Cors.add(request, responseBuilder).allowedOrigins("*").auth().build();

}

org.keycloak.services.resources.Cors對象

org.keycloak.services.resources.Cors 類是 Keycloak 中用於處理跨域資源共享(CORS)的工具類。在 Web 開發中,由於瀏覽器的同源策略限制,跨域請求可能會受到限制,而 CORS 是一種機制,允許服務器聲明哪些源可以訪問其資源。

org.keycloak.services.resources.Cors 類提供了一些方法來幫助處理 CORS 相關的邏輯,包括:

  • checkCorsPreflightRequest:用於檢查是否爲 CORS 預檢請求(Preflight Request),並根據請求頭信息進行相應處理。
  • addHeaders:向響應中添加 CORS 相關的頭信息,如 Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-Control-Allow-Headers 等。

通過使用 org.keycloak.services.resources.Cors 類,你可以更方便地處理跨域請求,確保符合 CORS 的規範,從而使得客戶端能夠安全地與 Keycloak 服務進行交互。這個類在 Keycloak 中的一些內部實現中被使用,以確保跨域請求能夠正確處理和響應。

跨域說明

當前端向後端發送xhr請求時,如果域名不同(a.shop.com和b.shop.com,雖然主域相同,但對於cors來說,也是跨域),瀏覽器會先發一個options的請求,返回是否支持跨域,並且告訴客戶端哪些(get,post,put,delete)方式支持跨域。

例如,如果服務端支持跨域,你的瀏覽器發送的OPTIONS請求將會返回如下截圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章