日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

获取http请求标头_HTTP请求和标头参数的CDI拦截器–简单示例

發布時間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 获取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
  • 我們基于注釋詳細信息應用一些自定義邏輯(我閱讀了定義中的所有參數)
  • 從請求中,我讀取了標頭并基于注釋參數–我做了一些基本的邏輯
package gr.javapapo.sample.cdi;import javax.inject.Inject; import javax.interceptor.AroundInvoke; import javax.interceptor.Interceptor; import javax.interceptor.InvocationContext; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.NotAllowedException;/*** CDI interceptor for the {@linkplain CheckRequest} annotation* Created by <a href="mailto:javapapo@mac.com">javapapo</a> on 24/09/15.*/ @Interceptor @CheckRequest public class CheckRequestInterceptor {@InjectHttpServletRequest request;@AroundInvokepublic Object checkAccess(InvocationContext ctx) throws Exception {CheckRequest annotation = ctx.getMethod().getAnnotation(CheckRequest.class);String role = annotation.role();String roleToken = request.getHeader("roleToken");if(roleToken==null && !role.equals(roleToken)){throw new NotAllowedException("Not allowed if your request does not have the roleToken header " +"or your role is not correct ");}return ctx.proceed();} }

應用攔截器/注釋

最終,您可以注釋@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拦截器–简单示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。