keycloak~正確讓api接口支(zhi)持跨域
相關參考
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這(zhe)個接(jie)口的跨域請求
@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 類(lei)是 Keycloak 中用于處理跨(kua)域(yu)資源(yuan)共享(CORS)的(de)工具類(lei)。在 Web 開發中,由于瀏覽器的(de)同(tong)源(yuan)策略限(xian)制,跨(kua)域(yu)請求可(ke)能(neng)會受到限(xian)制,而 CORS 是一種(zhong)機制,允許服(fu)務器聲明哪(na)些(xie)源(yuan)可(ke)以訪問其資源(yuan)。
org.keycloak.services.resources.Cors 類提供(gong)了一些方法來幫助(zhu)處理 CORS 相關的邏輯,包括:
checkCorsPreflightRequest:用于檢查是否為 CORS 預檢請求(Preflight Request),并根據請求頭信息進行相應處理。addHeaders:向響應中添加 CORS 相關的頭信息,如Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers等。
通過使用 org.keycloak.services.resources.Cors 類(lei),你可以更方便地處理(li)跨域請求,確保符合(he) CORS 的規范,從(cong)而使得(de)客戶端(duan)能夠安全地與 Keycloak 服務進行交(jiao)互。這個類(lei)在 Keycloak 中的一些內(nei)部實現(xian)中被使用,以確保跨域請求能夠正確處理(li)和響應。
跨域說明
當前端(duan)向后端(duan)發送xhr請求(qiu)(qiu)時(shi),如果域(yu)(yu)名不同(a.shop.com和b.shop.com,雖然主域(yu)(yu)相同,但對于cors來說(shuo),也(ye)是跨(kua)域(yu)(yu)),瀏(liu)覽器會先發一個options的(de)請求(qiu)(qiu),返回(hui)是否支(zhi)持(chi)跨(kua)域(yu)(yu),并且告訴客戶(hu)端(duan)哪些(xie)(get,post,put,delete)方式支(zhi)持(chi)跨(kua)域(yu)(yu)。
例如,如果服務端支持跨域,你的(de)瀏覽器發(fa)送的(de)OPTIONS請求將(jiang)會返回如下截(jie)圖:
