Servlets 查找web请求将命中的servlet

Servlets 查找web请求将命中的servlet,servlets,servlet-filters,Servlets,Servlet Filters,在servlet过滤器中,是否有办法确定某个特定请求最终会命中哪个servlet?我需要在过滤器中基于servlet(而不是URL模式)执行基于角色的安全检查(由于遗留原因) 感谢HttpServletRequest.getServletPath()返回导致调用servlet的请求URI部分。此信息不适用于 如果您已经使用Servlet 3.0(Tomcat 7、Glassfish 3、JBoss AS 6等),那么您可以通过以下方式获得所有Servlet注册和映射的信息: for(Entry=

在servlet过滤器中,是否有办法确定某个特定请求最终会命中哪个servlet?我需要在过滤器中基于servlet(而不是URL模式)执行基于角色的安全检查(由于遗留原因)


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

此信息不适用于

如果您已经使用Servlet 3.0(Tomcat 7、Glassfish 3、JBoss AS 6等),那么您可以通过以下方式获得所有Servlet注册和映射的信息:

for(Entry=servletContext.getServletRegistrations().entrySet()){
字符串servletClassName=entry.getKey();
集合urlPatterns=entry.getValue().getMappings();
// ...
}
您可以根据servlet映射和其他人获得的信息自行匹配URL


如果您还没有使用Servlet3.0,那么您需要解析
web.xml
,自己收集所有Servlet及其URL模式,或者在其他地方复制它。对于手动解析
web.xml
,可能很方便。

很好!这本质上允许过滤器评估servlet注释。顺便说一句,servletClassName是entry.getValue().getClassName()。Key是web.xml中servlet的名称
for (Entry<String, ? extends ServletRegistration> entry = servletContext.getServletRegistrations().entrySet()) {
    String servletClassName = entry.getKey();
    Collection<String> urlPatterns = entry.getValue().getMappings();
    // ...
}