找到Web请求将要访问的servlet

时间:2011-12-05 19:23:29

标签: servlets servlet-filters

在servlet Filter中,有没有办法找出特定请求最终会遇到哪个Servlet?我需要在过滤器中根据Servlet(而不是URL模式)进行基于角色的安全检查(由于遗留原因)。

感谢

2 个答案:

答案 0 :(得分: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();
    // ...
}

您可以根据servlet映射和其他HttpServletRequest#getServletPath()

获取的信息自行匹配URL

如果你还没有使用Servlet 3.0,那么你需要解析web.xml并自己收集所有servlet及其URL模式 ,或者获得它的副本别处。对于手动解析web.xmlJAXB可能会派上用场。

答案 1 :(得分:0)

HttpServletRequest.getServletPath()返回导致调用servlet的请求URI部分。