java - Servlet 过滤器 - 不要将过滤器应用于特定过滤器

标签 java servlets servlet-filters web.xml

我有一个 Web 应用程序,其登录屏幕由身份验证过滤器提供支持。

我的 web.xml 中有以下内容

<filter>
    <filter-name>AuthenticationFilter</filter-name>
    <display-name>AuthenticationFilter</display-name>
    <filter-class>com.mycompany.secutity.AuthenticationFilter</filter-class>
</filter>

我有以下映射-

<filter-mapping>
    <filter-name>AuthenticationFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

但现在我想为特定的 servlet /web/MyNewServlet 添加一个异常(exception),我想绕过身份验证过滤器。我们如何做到这一点?

最佳答案

有两种方法可以做到这一点:

  • /* 模式重新映射到另一个模式,如 /subdir/*,从而避免将 AuthenticationFilter 应用于 /web/MyNewServlet。这是一个繁琐的过程,因为您的 Web 应用程序中可能有多个 URL 现在需要重新映射。我建议在您的开发早期或当您没有太多要重新映射的 URL 时这样做。
  • 以编程方式在您的过滤器实现中包含排除规则。您将需要使用 HttpServletRequest.getServletPath和类似的方法来验证 URL 片段是否包含 /web/MyNewServlet,然后将过滤器链接到下一个过滤器或 servlet,而不是执行过滤器的主体。

关于java - Servlet 过滤器 - 不要将过滤器应用于特定过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7154433/

相关文章:

html - 如何使用 Servlet 流式传输 MP3、MP4、AVI 等音频/视频文件

java - 在调用 Servlet 之前运行 Javascript 函数

java - servlet 过滤器如何在请求页面上发送错误消息?

java - 如何确定该请求是否不是 Filter 中的初始请求?

java - 如何使用嵌入式 jetty 添加 servlet 过滤器

java - 如何限制 ArrayList 中的对象数量

java - 无法从同一网络java访问webservice

java - 非由具有 Spring 特性的 Spring Web 应用程序和 jar 文件管理

java - 可以插入的InputStream

java - 如何在所有窗口的顶部显示 JOptionPane