在一個servlet過濾器裏面,有沒有辦法找出一個特定的請求最終會打哪個Servlet?我需要基於Servlet(不是URL模式)在過濾器中進行基於角色的安全檢查(由於傳統原因)。找到一個web請求會擊中哪個servlet
感謝
在一個servlet過濾器裏面,有沒有辦法找出一個特定的請求最終會打哪個Servlet?我需要基於Servlet(不是URL模式)在過濾器中進行基於角色的安全檢查(由於傳統原因)。找到一個web請求會擊中哪個servlet
感謝
的HttpServletRequest.getServletPath()
返回請求URI,導致被調用的小服務程序的一部分。
該信息不適用於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.xml
,JAXB可能會得心應手。
不錯!這基本上允許過濾器評估servlet註釋。 BTW,servletClassName是entry.getValue()。getClassName()。 Key是web.xml中的servlet的名稱 –