获取http请求标头_HTTP请求和标头参数的CDI拦截器–简单示例
獲取http請(qǐng)求標(biāo)頭
在使用Java EE開(kāi)發(fā)和發(fā)展REST API的過(guò)程中,有些情況下您希望以更精細(xì)的方式(視情況)對(duì)傳入的HTTP請(qǐng)求(特別是標(biāo)頭參數(shù))進(jìn)行“觀察” Servlet過(guò)濾器或更具體的ContainerRequestFilters 。
我發(fā)現(xiàn)在某些情況下非常方便的一種可能方式是,在我的JAXRS Resource實(shí)現(xiàn)中添加CDI攔截器 ,該攔截器最終可以訪問(wèn)傳入的HTTP請(qǐng)求并執(zhí)行某些“自定義”邏輯。 作為開(kāi)發(fā)人員,我可以完全控制–只需添加或刪除自定義批注即可在哪個(gè)路徑(哪個(gè)路徑)中攔截請(qǐng)求。隨著Java EE 7的引入,混合“關(guān)注點(diǎn)”變得更加容易,因此您可以輕松注入普通CDI攔截器的HTTP請(qǐng)求 。
下面,我僅記錄一個(gè)非常簡(jiǎn)單的示例,其中我使用一個(gè)自定義攔截器來(lái)“攔截”業(yè)務(wù)REST API上的HTTP請(qǐng)求,以便執(zhí)行一些非常特定的自定義身份驗(yàn)證邏輯。 我正在檢查在我的REST API中發(fā)起請(qǐng)求的“用戶”是否具有系統(tǒng)定義的某些特定自定義角色。 當(dāng)然,整個(gè)示例只是一個(gè)示例,但是您明白了。
為了引入這樣一個(gè)組件,您需要兩件事:
- 引入自定義注釋,該注釋將在定義后用于激活攔截器
- 實(shí)現(xiàn)CDI攔截器。
- 在其余api的路徑/資源上應(yīng)用注釋
注釋界面
這里沒(méi)有什么特別的,只是一個(gè)自定義的運(yùn)行時(shí)批注,因此我們可以使用它來(lái)“標(biāo)記” JAXRS API的特定方法。
package gr.javapapo.sample.cdi;/*** Created by <a href="mailto:javapapo@mac.com">javapapo</a> on 24/09/15.*/ import javax.enterprise.util.Nonbinding; import javax.interceptor.InterceptorBinding; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@InterceptorBinding @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface CheckRequest {@Nonbinding String role() default "ADMIN"; }攔截器的實(shí)現(xiàn)
值得注意的幾點(diǎn):
- 攔截器已使用我們的自定義注釋“標(biāo)記”了-簡(jiǎn)單
- 我們@Inject HttpServletReqest
- 我們基于注釋詳細(xì)信息應(yīng)用一些自定義邏輯(我閱讀了定義中的所有參數(shù))
- 從請(qǐng)求中,我讀取了標(biāo)頭并基于注釋參數(shù)–我做了一些基本的邏輯
應(yīng)用攔截器/注釋
最終,您可以注釋@Path JAXRS資源和方法,以便“踢”自定義邏輯:
@Path("/status") public class StatusResource {/*** Returns a simple JSON object, regarding the app status, n** @return Response <JsonObject>*/@GET@Produces(MediaType.APPLICATION_JSON)@CheckRequest(role="ADMIN")public Response getStatus() {JsonObject object = Json.createObjectBuilder().add("status", "Status with CDI internceptor check,It Works at " + LocalDateTime.now().toString()).build();Response.ResponseBuilder repBuilder = Response.ok().entity(object);return repBuilder.build();}- 您可以在github上這個(gè)非常簡(jiǎn)單的示例項(xiàng)目中找到所有文件。
翻譯自: https://www.javacodegeeks.com/2015/10/cdi-interceptor-of-http-request-and-header-params-simple-example.html
獲取http請(qǐng)求標(biāo)頭
總結(jié)
以上是生活随笔為你收集整理的获取http请求标头_HTTP请求和标头参数的CDI拦截器–简单示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电话变声软件安卓免费(电话变声软件安卓)
- 下一篇: DR备案(dr备案)