【发布时间】:2012-12-30 18:36:55
【问题描述】:
[上下文] tomcat 7 - java 1.7
大家好;我正面临着陌生人的工作。 在我的 web.xml 文件中,我映射了这样的请求:
web.xml
<web-app>
<filter>
<filter-name>filter</filter-name>
<filter-class>demo.DemoFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>demo.DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
DemoFilter.java(实现过滤器)
@Override
public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain )
throws IOException, ServletException
{
try
{
chain.doFilter(req, res);
}
catch ( Exception e )
{
System.err.println("error");
((HttpServletResponse) res).setContentType("text/html");
((HttpServletResponse) res).setStatus(HttpServletResponse.SC_NOT_FOUND);
res.getWriter().write("foo");
}
}
DemoServlet.java(扩展 HttpServlet)
@Override
protected void doGet( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException
{
System.err.println(req.getRequestURI());
throw new RuntimeException("ERROR");
}
[1 = 预期结果] 首先,当我尝试请求“/foo/bar”时,过滤器和 servlet 被调用(页面显示单词“foo”)。控制台结果:
/foo/bar
error
[2 = Unexpected result] 然后,当我尝试请求“/WEB-INF/foo/bar”时,没有调用任何内容(我的过滤器和我的 servlet 没有被命中),我得到了Tomcat 错误报告:
HTTP Status 404 -
type Status report
message
description The requested resource is not available.
Apache Tomcat/7.0.30
编辑:在这里,我希望得到以下结果:
/WEB-INF/foo/bar
error
我的目标是使用我的过滤器来处理异常(包括“/WEB-INF”调用)。
- 为什么以“/WEB-INF/”开头的请求永远不会命中映射在“/*”模式上的过滤器/servlet?
- 我们如何解决这个问题?
提前致谢!
PS:我想保留我当前的 web.xml 配置(“url-pattern”=“/*”;不使用“error-page”)
编辑: 我的问题被误解了。我不想在我的“WEB-INF”目录下提供文件访问。我想用我的过滤器和 Servlet (url-pattern='/*') 来处理每个请求,即使请求 URI 以“/WEB-INF/”开头。谢谢!
【问题讨论】:
-
因为这就是 Servlet 规范中所说的。
-
为什么要请求 /WEB-INF/foo/bar?你打算在那里放什么需要这种访问权限?
-
@TheZuck 例如创建一个记录用户操作的过滤器。或者在我的情况下,将异常处理集中在过滤器中。
-
我明白你现在想要做什么,这是一个有趣的问题,但是,由于 WEB-INF 非常特别,答案将非常具体,而且 IMO 不那么有趣。使用您的常规过滤器为其他所有内容提供服务,并在其他 1000 种人们试图渗透您的网站的方式上捕获黑客尝试。访问 WEB-INF(及其配套的 META-INF)只能来自黑客尝试,所以我没有义务以优雅的方式做出回应。
-
tomcat 7 - java 1.7 - 这是犯罪。没有人应该再运行 JDK 7。请升级。
标签: java jakarta-ee tomcat web.xml