获取http请求标头_HTTP请求和标头参数的CDI拦截器–简单示例
獲取http請求標頭
在使用Java EE開發和發展REST API的過程中,有些情況下您希望以更精細的方式(視情況)對傳入的HTTP請求(特別是標頭參數)進行“觀察” Servlet過濾器或更具體的ContainerRequestFilters 。
我發現在某些情況下非常方便的一種可能方式是,在我的JAXRS Resource實現中添加CDI攔截器 ,該攔截器最終可以訪問傳入的HTTP請求并執行某些“自定義”邏輯。 作為開發人員,我可以完全控制–只需添加或刪除自定義批注即可在哪個路徑(哪個路徑)中攔截請求。隨著Java EE 7的引入,混合“關注點”變得更加容易,因此您可以輕松注入普通CDI攔截器的HTTP請求 。
下面,我僅記錄一個非常簡單的示例,其中我使用一個自定義攔截器來“攔截”業務REST API上的HTTP請求,以便執行一些非常特定的自定義身份驗證邏輯。 我正在檢查在我的REST API中發起請求的“用戶”是否具有系統定義的某些特定自定義角色。 當然,整個示例只是一個示例,但是您明白了。
為了引入這樣一個組件,您需要兩件事:
- 引入自定義注釋,該注釋將在定義后用于激活攔截器
- 實現CDI攔截器。
- 在其余api的路徑/資源上應用注釋
注釋界面
這里沒有什么特別的,只是一個自定義的運行時批注,因此我們可以使用它來“標記” 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"; }攔截器的實現
值得注意的幾點:
- 攔截器已使用我們的自定義注釋“標記”了-簡單
- 我們@Inject HttpServletReqest
- 我們基于注釋詳細信息應用一些自定義邏輯(我閱讀了定義中的所有參數)
- 從請求中,我讀取了標頭并基于注釋參數–我做了一些基本的邏輯
應用攔截器/注釋
最終,您可以注釋@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上這個非常簡單的示例項目中找到所有文件。
翻譯自: https://www.javacodegeeks.com/2015/10/cdi-interceptor-of-http-request-and-header-params-simple-example.html
獲取http請求標頭
總結
以上是生活随笔為你收集整理的获取http请求标头_HTTP请求和标头参数的CDI拦截器–简单示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电话变声软件安卓免费(电话变声软件安卓)
- 下一篇: 詹金斯搭建_与詹金斯一起将GitLab中