Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何仅为控制器配置的路径配置spring筛选器_Java_Spring_Spring Mvc - Fatal编程技术网

Java 如何仅为控制器配置的路径配置spring筛选器

Java 如何仅为控制器配置的路径配置spring筛选器,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有一个SpringMVC项目和一个SpringREST项目。在这两种情况下,我都使用过滤器为SLF4J/Logback日志添加会话ID。但是,每个HTTP请求(如静态文件、favicon.ico等)都会调用筛选器。我知道这是因为我在筛选器中使用了/*。如何预防?我希望仅为控制器处理的路径调用筛选器。这是我在web.xml中的过滤器集 <filter> <filter-name>AppRequestFilter</filter-name>

我有一个SpringMVC项目和一个SpringREST项目。在这两种情况下,我都使用过滤器为SLF4J/Logback日志添加会话ID。但是,每个HTTP请求(如静态文件、favicon.ico等)都会调用筛选器。我知道这是因为我在筛选器中使用了/*。如何预防?我希望仅为控制器处理的路径调用筛选器。这是我在web.xml中的过滤器集

<filter>
        <filter-name>AppRequestFilter</filter-name>
        <filter-class>com.company.appui.filter.AppRequestFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>AppRequestFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  <filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/app/*,/v1/healthcheck/*</url-pattern>
  </filter-mapping> 
我的SpringREST项目的示例URL

localhost:8080/v1/apphealthcheck/epp?token=37e11b48119d
SpringMVC项目的示例URL

localhost:28082/app ui/index.html
-主页
localhost:28082/app ui/login
-对于index.html

中的ajax调用,您可以通过在开始处为所有控制器处理的请求添加特定的URL路径分支并将筛选器映射到该URL来解决此问题。
重构是否为时已晚?Restful服务通常在开发过程中以这种方式灵活…

您可以在
url模式中指定逗号分隔的值
,甚至在
过滤器映射中使用多个
url模式元素。但要使其工作,您需要在MVC控制器URL和REST URL中具有公共前缀

现在,您可以在web.xml中拥有以下映射

<filter>
        <filter-name>AppRequestFilter</filter-name>
        <filter-class>com.company.appui.filter.AppRequestFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>AppRequestFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  <filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/app/*,/v1/healthcheck/*</url-pattern>
  </filter-mapping> 

我的过滤器
/app/*,/v1/healthcheck/*


我的过滤器
/应用程序/*
/v1/健康检查/*

你能为spring mvc和spring rest项目发布你的url模式吗?因此,假设所有mvc url都有
app ui
,所有rest调用都有
v1
?@Arkantos,我的mvc产品url将是mydomain.com/index.html或mydomain.com/login,用于ajax调用。剩下的将是mydomain.com/v1/healthcheck。所以rest调用将有v1。MVC不会有应用程序uiOk你的静态文件有什么共同点吗?类似于
/your domain/static/js/app.js中的
static
@Arkantos,不。我想我在这种情况下犯了一个错误。如果这给我带来了不调用过滤器的性能优势,我可以将它们移动到静态。此外,目前所有动态内容URL都是domain.com/-没有其他斜杠。如果它是domain.com/pathto/something,我们可以假设在spring mvc项目中这是一个静态文件。我的服务器上没有它的文件。也许我应该为它设置一个控制器并返回空的身体?谢谢。这有帮助。现在,由于路径的改变,我正在努力解决我的cookies。My/api/something api调用设置cookies,运行在/的JS似乎无法访问这些cookies。看起来像是不同的问题,但若你们有任何问题,请抛出指针。我可以简单地在Java程序中创建cookie时设置路径。不要介意。谢谢。但是cookies是域级别的,只要你的域对所有动态内容都是相同的,你就应该能够访问它们