如何使filter检测用户是否请求了未找到的页面?
我想在我的应用程序中创建一个filter,以便在每个请求之前,它检测所请求的页面是否存在。 如果它不存在,它会将用户转发到错误页面。
如何检测页面是否存在?
我需要一个带filter的解决方案,而不是使用web.xml标记方法。
如果您没有身份validation,则可以。
- 制作
Filter
- 使用HttpServletResponseWrapper并覆盖
sendError()
和setStatus()
- 通过
chain.doFilter(req, wrapper)
传递包装的响应chain.doFilter(req, wrapper)
- 如果在包装器中得到
sendError()
,请查看它是否为404。 - 做出适当的回应。
您可能还必须覆盖getOutputStream()
和getWriter()
以避免在您有机会执行操作之前将响应刷新到客户端。
您可以在web.xml中直接配置它
404 /yourCustom404.jsp
或者创建一个filter并使用HTTPURLConnection以编程方式检测页面是否存在。
“页面存在”并不是一件轻而易举的事。 页面不需要以文件forms存在。
除了org.life.java提到的用于使用HttpURLConnection
模拟请求的选项之外,您还可以创建HttpServletResponseWrapper
,覆盖setStatus
方法,并且每当设置为404
,请采取额外措施。