在servlet Filter中,有没有办法找出特定请求最终会遇到哪个Servlet?我需要在过滤器中根据Servlet(而不是URL模式)进行基于角色的安全检查(由于遗留原因)。
感谢
答案 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()
如果你还没有使用Servlet 3.0,那么你需要解析web.xml
并自己收集所有servlet及其URL模式 ,或者获得它的副本别处。对于手动解析web.xml
,JAXB可能会派上用场。
答案 1 :(得分:0)
HttpServletRequest.getServletPath()
返回导致调用servlet的请求URI部分。