2011-12-05 8 views
2

在一個servlet過濾器裏面,有沒有辦法找出一個特定的請求最終會打哪個Servlet?我需要基於Servlet(不是URL模式)在過濾器中進行基於角色的安全檢查(由於傳統原因)。找到一個web請求會擊中哪個servlet

感謝

回答

0

HttpServletRequest.getServletPath()返回請求URI,導致被調用的小服務程序的一部分。

1

該信息不適用於HttpServletRequest

如果你已經對Servlet的3.0(Tomcat的7,Glassfish的3,JBoss AS中6,等等),那麼你可以通過ServletContext#getServletRegistrations()得到所有的servlet註冊和映射的信息:

for (Entry<String, ? extends ServletRegistration> entry = servletContext.getServletRegistrations().entrySet()) { 
    String servletClassName = entry.getKey(); 
    Collection<String> urlPatterns = entry.getValue().getMappings(); 
    // ... 
} 

你可以這樣做該URL匹配自己的基礎上通過等HttpServletRequest#getServletPath()

如果您還沒有進入的Servlet 3.0所獲得的servlet映射和信息,那麼你需要解析web.xml,並收集所有的servlet和他們的URL模式自己 , 要麼 在其他地方複製它。對於手動解析web.xmlJAXB可能會得心應手。

+0

不錯!這基本上允許過濾器評估servlet註釋。 BTW,servletClassName是entry.getValue()。getClassName()。 Key是web.xml中的servlet的名稱 –

相關問題