当前位置: 首页 > 面试题库 >

Java可以从

龙新荣
2023-03-14
问题内容

我希望对所有网址应用一种具体的过滤器,但一种具体的/*除外(即除外/specialpath)。

有可能这样做吗?

样例代码:

<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>

问题答案:

标准Servlet API不支持此功能。你可能想要为此使用改写URL过滤器(例如Tuckey的过滤器)(与Apache HTTPD的过滤器非常相似mod_rewrite),或者doFilter()在Filter侦听的方法中添加一个检查/*

String path = ((HttpServletRequest) request).getRequestURI();
if (path.startsWith("/specialpath/")) {
    chain.doFilter(request, response); // Just continue chain.
} else {
    // Do your business stuff here for all paths other than /specialpath.
}

如有必要,可以将要忽略的路径指定为init-param过滤器的,以便web.xml无论如何都可以对其进行控制。你可以按以下方式在过滤器中获取它:

private String pathToBeIgnored;

public void init(FilterConfig config) {
    pathToBeIgnored = config.getInitParameter("pathToBeIgnored");
}

如果过滤器是第三方API的一部分,因此你无法对其进行修改,则将其映射到更具体的url-pattern,例如/otherfilterpath/*,创建一个新过滤器,/*并转发到与第三方过滤器匹配的路径。

String path = ((HttpServletRequest) request).getRequestURI();
if (path.startsWith("/specialpath/")) {
    chain.doFilter(request, response); // Just continue chain.
} else {
    request.getRequestDispatcher("/otherfilterpath" + path).forward(request, response);
}

为避免此过滤器在无限循环中调用自身,你需要让其REQUEST仅在(第三方)过滤器上侦听(调度)FORWARD。



 类似资料:
  • 在此代码中: 当<代码>值时 具体来说,我正在考虑如何

  • 问题内容: 简而言之,我需要能够将已编译的可执行文件粘贴到Java jar文件中,然后能够从Java运行它(可能通过)。 的 原因 ,是我想使用Java来包裹ImageMagick的可执行文件成分的图像处理弹性的Map Reduce任务。EMR只希望获取一个jar文件,因此我认为没有空间在旋转的数据节点上安装软件。 问题答案: jar中的可执行文件是一种资源,您可以通过Stream访问它,并将可执

  • 问题内容: 我正在尝试了解观察者和可观察者。 这是我要弄清楚的一个示例: 该可制成只是因为延伸? 该观察者被添加到哪里?正在创建什么,在哪里创建? 和之间有什么区别? 我不明白这种方法。代表什么?为什么需要检查?为什么要更新另一个可观察的东西? 无论如何我为什么需要这个观察者? 问题答案: 是。是抽象类中的方法。请参阅Java文档中的Observable。 它已添加到中的列表中。 在设置之前,对的

  • 问题内容: 我正在学习Scala,并好奇是否有可能: 创建一个在Scala中实现Java接口的对象 将对象编译成类文件并将其打包 使用Java中的对象 我想在Scala中实现自定义Lucene查询解析器,并能够让其他人从Java应用程序访问它。 问题答案: 我假设“对象”实际上是“类”。无论如何,答案是肯定的,您可以这样做。如果您希望所有这些都在同一项目中,则需要利用Scala / Java联合编

  • 问题内容: 是否可以从Java调用COM API(特别是HP / Mercury Quality Center OTA API)?如果是这样,最好的方法是什么? 像JACOB一样合适吗? 代码片段对于基础知识会有所帮助:-) 问题答案: jacob:是的,http://sourceforge.net/projects/jacob- project/ 是一个活跃的项目,可以很好地满足您的目的。 您可

  • 问题内容: 这是我要完成的工作,我有一个包含一些值的枚举的类,我想对该类进行子类化并向该枚举添加更多值。这是一个不好的例子,但是: 因此HexDigits.Digit包含所有十六进制数字。那可能吗? 问题答案: 不,这不可能。最好的办法是使两个枚举实现和接口,然后使用该接口代替枚举。所以: