首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以从<filter-mapping>内部的<url-pattern>排除一些具体的url吗?

我可以从<filter-mapping>内部的<url-pattern>排除一些具体的url吗?
EN

Stack Overflow用户
提问于 2010-06-27 03:47:40
回答 4查看 201.4K关注 0票数 131

我希望将一些具体的过滤器应用于除一个具体的urls之外的所有urls(即,除了/specialpath之外的/* )。

有这样做的可能性吗?

示例代码:

代码语言:javascript
复制
<filter>
    <filter-name>SomeFilter</filter-name>
    <filter-class>org.somproject.AFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SomeFilter</filter-name>
    <url-pattern>/*</url-pattern>   <!-- the question is: how to modify this line?  -->
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>
EN

回答 4

Stack Overflow用户

发布于 2012-03-23 17:20:42

我使用了一种方法described by Eric Daugherty:我创建了一个特殊的servlet,它总是用403代码响应,并将其映射放在常规映射之前。

映射片段:

代码语言:javascript
复制
  <servlet>
    <servlet-name>generalServlet</servlet-name>
    <servlet-class>project.servlet.GeneralServlet</servlet-class>
  </servlet>
 <servlet>
    <servlet-name>specialServlet</servlet-name>
    <servlet-class>project.servlet.SpecialServlet</servlet-class>
 </servlet>
 <servlet-mapping>
    <servlet-name>specialServlet</servlet-name>
    <url-pattern>/resources/restricted/*</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
    <servlet-name>generalServlet</servlet-name>
    <url-pattern>/resources/*</url-pattern>
 </servlet-mapping>

和servlet类:

代码语言:javascript
复制
public class SpecialServlet extends HttpServlet {
    public SpecialServlet() {
        super();
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendError(HttpServletResponse.SC_FORBIDDEN);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendError(HttpServletResponse.SC_FORBIDDEN);
    }
}
票数 14
EN

Stack Overflow用户

发布于 2017-02-28 06:10:24

我还必须根据java代码中的URL模式(/{servicename}/api/stats/)进行过滤。

代码语言:javascript
复制
if (path.startsWith("/{servicename}/api/statistics/")) {
validatingAuthToken(((HttpServletRequest) request).getHeader("auth_token"));
filterChain.doFilter(request, response);            
}

但奇怪的是,servlet除了(/*)之外不支持url模式,这对于servlet API来说应该是非常常见的情况!

票数 3
EN

Stack Overflow用户

发布于 2017-11-02 17:54:50

我也遇到了同样的问题,但我发现下面显示了一个答案。

web.xml

代码语言:javascript
复制
 <!-- set this param value for the filter-->
    <init-param>
            <param-name>freePages</param-name>
            <param-value>
            MainFrame.jsp;
            </param-value>
    </init-param>

filter.java

代码语言:javascript
复制
strFreePages = config.getInitParameter("freePages"); //get the exclue pattern from config file
isFreePage(strRequestPage)  //decide the exclude path

这样,您就不必困扰具体的Filter类了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3125296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档