Java 如何仅为控制器配置的路径配置spring筛选器
我有一个SpringMVC项目和一个SpringREST项目。在这两种情况下,我都使用过滤器为SLF4J/Logback日志添加会话ID。但是,每个HTTP请求(如静态文件、favicon.ico等)都会调用筛选器。我知道这是因为我在筛选器中使用了/*。如何预防?我希望仅为控制器处理的路径调用筛选器。这是我在web.xml中的过滤器集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>
<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是域级别的,只要你的域对所有动态内容都是相同的,你就应该能够访问它们