簡體   English   中英

如何在當前過濾器中獲取被詢問的 servlet?

[英]how can i get the asked servlet in the current filter?

(對不起我的英語,我說法語)

在我正在編寫的過濾器中,我需要知道用戶詢問的 servlet 的名稱。 它將允許我檢查 servlet 是否與我的數據庫條目匹配。 事實上,我正在編寫一個限制過濾器。 這是它的工作原理:

  • 用戶嘗試獲取鏈接到“userListe”Servlet 的 URL /users/liste
  • 第一個過濾器 (SimpleConnexion) 檢查用戶對象是否在 httpsession 中定義(= 用戶是否已連接?)。 如果用戶已連接,則調用第二個過濾器,否則將發送到連接頁面的重定向。
  • 在第二個過濾器(AccessRights)中,我需要 servlet 的名稱(userListe)和服務方法(即 get、post、head、put、delete...)。

我檢查數據庫中是否為當前用戶的訪問權限定義了條目 servletName-service。 如果是,則調用 servlet,否則重定向到連接頁面。

如何在過濾器中獲取當前 Servlet 對象或名稱?

使用 Eclipse 的調試工具,我注意到作為 Filter.doFilter 方法參數給出的 FilterChain 對象包含一個名為“userListe”的對象 servlet。 但是這個對象是私有的,所以我不能使用它。 你知道有什么方法可以幫助我。

((我真的需要在過濾器中完成這項工作,因為涉及到許多 servlet。))

謝謝你的幫助

如果您正在運行 Servlet API 的 4.0 或更高版本,則有一個在運行時構造的映射類可供您用於此目的:

HttpServletMapping    

您可以從請求中提取映射的 servlet 名稱,如下所示:

String servletName = ((HttpServletRequest) request).getHttpServletMapping().getServletName();

您可以使用httpRequest.getServletPath()方法來確定調用了哪個 servlet。 它返回當前 servlet 的 URL(例如/users/liste ),該 URL 與 servlet 的名稱不同,但如果我正確理解您的問題,它應該可以解決問題。

您可以使用方法httpRequest.getMethod()來檢索使用的 http 方法(get、post 等)。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    String servletPath = httpRequest.getServletPath();
    String httpMethod = httpRequest.getMethod();
    ...
}

暫無
暫無

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

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