相關參考 https://leejjon.medium.com/how-to-allow-cross-origin-requests-in-a-jax-rs-microservice-d2a6aa2df484 https://stackoverflow.com/questions/28065963/ ...
相關參考
- https://leejjon.medium.com/how-to-allow-cross-origin-requests-in-a-jax-rs-microservice-d2a6aa2df484
- https://stackoverflow.com/questions/28065963/how-to-handle-cors-using-jax-rs-with-jersey
- https://keycloak.discourse.group/t/cors-problem-in-custom-rest-endpoint/7437
- https://stackoverflow.com/questions/47860019/keycloak-cors-headers-in-401
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-Origin
、Access-Control-Allow-Methods
、Access-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請求將會返回如下截圖:
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!