簡體   English   中英

Java EE 中的攔截器是什么?

[英]What are Interceptors in Java EE?

我試圖澄清我關於 Java EE 中攔截器的概念。 我已經閱讀了 Java EE 規范,但我對此並不感到困惑。 請為我提供一些有用的鏈接或教程,它們可以清除我的概念。 我們如何、何時、為什么使用攔截器?

攔截器用於從業務邏輯實現跨域關注,例如日志記錄,審計和安全性。

在Java EE 5中,僅允許在EJB上使用攔截器。 在Java EE 6中,Interceptor成為了自己的新規范,在更高層次上進行了抽象,因此它可以更廣泛地應用於平台中更廣泛的規范集。

它們攔截相關目標類的調用和生命周期事件。 基本上,攔截器是一個類,其方法在調用目標類上的業務方法時調用,生命周期事件(如創建/銷毀bean的方法)或EJB超時方法發生。 CDI規范定義了一種類型安全機制,用於使用攔截器綁定將攔截器與bean相關聯。

在以下位置查找工作代碼示例:

https://github.com/arun-gupta/javaee7-samples/tree/master/cdi/interceptors

Java EE 7還在Java Transaction API中引入了一個新的@Transactional注釋。 這允許您在EJB之外擁有容器管理的事務。 此批注被定義為攔截器綁定,並由Java EE運行時實現。 @Transactional的工作樣本位於:

https://github.com/arun-gupta/javaee7-samples/tree/master/jta/transaction-scope

我喜歡這個定義:攔截器是攔截EJB方法調用的組件。 它們可以在訪問EJB時用於審計和日志記錄。

在另一種情況下,它們可以用於我們需要檢查客戶端是否具有在數據庫中的特定對象上執行事務的權限或許可的情況。 好吧,這就是攔截器派上用場的地方; 他們可以通過檢查客戶端/用戶是否可以在該數據庫對象或EJB上調用該方法來檢查客戶端/用戶是否具有該權限。

但是,我仍然會查看以下文章和以下教程,以了解它們如何在Java EE設置/環境中使用。

攔截器用於向托管bean 添加AOP功能

我們可以使用@Interceptor注釋將Interceptor附加到我們的類。 每當調用我們類中的方法時 ,附加的Interceptor將攔截該方法調用並執行其攔截器方法。

這可以使用@AroundInvoke注釋來實現(參見下面的示例)。

方法攔截器

我們可以使用@AroundConstruct注釋攔截類的生命周期事件(對象創建,銷毀等)。

Interceptor和Servlet過濾器之間的主要區別是我們可以在WebContext之外使用Interceptor,但過濾器特定於Web應用程序。

攔截器的常見用途是記錄,審計和分析。

有關更詳細的介紹,您可以閱讀本文。 https://abhirockzz.wordpress.com/2015/01/03/java-ee-interceptors/

在向 Controller 類發送請求之前和向響應發送請求之前,您可以將 Interceptor 用於要執行某些任務的地方。 例如:- 在這種情況下,您想在向 Controller 類發送請求之前驗證身份驗證令牌,您可以使用攔截器。 示例代碼:

@Component
public class AuthInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse 
response, Object handler) throws Exception {
    //Here you can write code to validate the auth token.
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM