- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
实际上,我对 Java EE 规范还很陌生,因为我还很年轻。我从来没有在学校学过这些东西,而且我在使用 doFilter
方法时遇到了奇怪的行为。
考虑以下过滤器:
@WebFilter(filterName = "URLFilter", value = "/test")
public class URLFilter implements Filter {
public void destroy() {}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletResponse response = (HttpServletResponse) resp;
if (response.getStatus() == HttpServletResponse.SC_NOT_FOUND)
response.sendRedirect("/");
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {}
}
/test
中不存在 servlet 或页面,并且在我的浏览器中,访问 URL 时状态显然是 404 not found
错误,因此应该是getStatus()
方法返回给我的值,但事实并非如此。 (实际上有一个 200
状态代码)
为什么我的过滤器没有按照请求将我重定向到 /
?我是否误解了 Filters
的一般用途?
更新:
我的问题是关于在找不到页面时重定向客户端(使用sendRedirect()
)。我不理解过滤器部分,因为我不知道 resp
和 req
实际上在 chain.doFilter()
时填充了新数据> 被调用。 (实际上我觉得很奇怪,因为 doFilter 正在调用由 COR 模式链接的下一个 Filter)
我创建了一个继承 HttpServletResponseWrapper
的类,实现了它,将其传递给 Filter,现在工作正常。
最佳答案
在尝试访问位于 /test
的实际资源(Servlet、页面、文件等)之前,会调用您的过滤器。所以此时响应状态还不能是404。
然后您的过滤器调用 chain.doFilter(),从而告诉容器实际提供 /test
处的资源。由于没有这样的资源,您会得到 404。
关于java - 对 doFilter 方法可能的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40136168/
在 Filter.doFilter 中方法我打了这个电话chain.doFilter . doFilter 在 doFilter 中做什么?不是递归调用吗? 最佳答案 Servlet 过滤器是 Cha
你能帮忙看看为什么doFilter没有被调用吗 web.xml: log4jConfigLocation /WEB-INF/log4j.properties org.springfr
我已经搜索并看到了有关此问题的几个帖子,但没有找到如何可能的答案。 我想要做的是在过滤器链之后添加 header , public void doFilter(ServletRequest reque
我设置服务器的经验几乎为零,但目前我的工作是设置一台(不要问为什么)。这是一个 apache-tomcat6 服务器。 我一步步遵循了一些说明,当需要测试一切是否正常时,我得到的是: 我知道这有点盲目
实际上,我对 Java EE 规范还很陌生,因为我还很年轻。我从来没有在学校学过这些东西,而且我在使用 doFilter 方法时遇到了奇怪的行为。 考虑以下过滤器: @WebFilter(filter
在这个 dofilter 方法中,ServletRequest 总是返回空值,我不知道是什么原因? 过滤器.java public void doFilter(ServletRequest reque
我希望在 doFilter() 函数完成运行后添加一个 HTTP header 。 public void doFilter(ServletRequest request, ServletRespon
我已经在 Spring Boot 应用程序中定义了 servlet 过滤器实现。我所有的电话都只能得到 200 条回复。如何在 dofilter 方法中获得适当的响应? public void do
为了这就是我需要发生的事情: 请求 blah.com/test ServletFilter A - 创建配置文件,然后调用 chain.doFilter ServletFilter B(因为 url
我正在学习 Java EE servlet 教程并尝试了 mood example .我注意到 doFilter 被调用了两次,一次 servlet 调用在链中,第二次不在链中。 我在 TimeOfD
当我在 Spring MVC 中创建 servlet 过滤器时,出现以下异常。 [javax.servlet.ServletException: java.lang.IllegalStateExce
因此,我一直在观察有关此主题的一些答案,并且我知道在 doFilter() 调用完成后,现在修改响应 header 已经太晚了,为了最好地处理这种情况,我应该使用响应包装器。 我想知道如何处理这样的情
我使用Filter来拦截每个请求,在filter中我只能获取ServletRequest输入流,它返回空输入流,以获取输入流。看来我需要获取HttpServletRequest。如何实现这一目标?我尝
我正在使用 dropwizard 构建应用程序。 我创建了一个过滤器来拦截并记录调用服务的相关 ID。 如果传入请求的 header 中没有 header “Correlation-Id”,我们会将一
我正在尝试在浏览器上显示 pdf 作为输出。这是我在 servlet 的 dofilter 类中的代码。我已经在这一行得到了一个可以正确渲染 pdf 的字节数组 --> byte[] pdfArray
您好,我创建了一个 Filter 类并配置了 web.xml,如下所示: LoginFilter my.web.auth.LoginFilter test-
我已经搜索并看到了关于这个问题的几个答案,但仍然不知道这是怎么可能的...... 我被要求实现一个过滤器,该过滤器在响应 header 中返回 HTTP 请求的响应时间,例如。响应 header :X
javax.servlet.Filter对象既可用于身份验证(其中 Filter 需要在需要完成任何 servlet 工作之前捕获请求),也可用于 XSLT 转换(其中 servlet 需要完全完成生
我有一个 Tomcat 过滤器,它根据 URL 将请求委托(delegate)给处理对象。这是 FilterChain 中唯一的过滤器。我有一个 Ajax 应用程序可以通过大量请求来处理此过滤器。 最
我有一个带有 doFilter 方法的过滤器类。在 doFilter 方法中,我设置了一个 cookie,如下所示 HttpServletResponse httpResp=(HttpServletR
我是一名优秀的程序员,十分优秀!