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

jag*_*mot 6 java web.xml servlets servlet-filters

我有一个由身份验证过滤器备份的登录屏幕的Web应用程序.

我的web.xml中有以下内容

<filter>
    <filter-name>AuthenticationFilter</filter-name>
    <display-name>AuthenticationFilter</display-name>
    <filter-class>com.mycompany.secutity.AuthenticationFilter</filter-class>
</filter>
Run Code Online (Sandbox Code Playgroud)

我有以下映射 -

<filter-mapping>
    <filter-name>AuthenticationFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

但是现在我想添加一个异常,对于特定的servlet /web/MyNewServlet,我想绕过authenctication过滤器.我们应该怎么做?

Vin*_*lds 6

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

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