【发布时间】:2015-03-05 15:52:54
【问题描述】:
我有一个 Spring MVC 项目和一个 Spring Rest 项目。在这两种情况下,我都使用过滤器为 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>
我在 java 程序中配置过滤器的另一个应用程序
private void registerFilters(Environment environment, ApplicationContext context) {
environment.addFilter(context.getBean(AppRequestFilter.class), "/*");
environment.addFilter(context.getBean(AuthFilter.class), "/*");
}
我的 spring rest 项目的示例 URL
localhost:8080/v1/apphealthcheck/epp?token=37e11b48119d
spring MVC 项目的示例 URL
localhost:28082/app-ui/index.html - 主页
localhost:28082/app-ui/login - 来自 index.html 的 ajax 调用
【问题讨论】:
-
你能发布你的 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。所以休息电话将有v1。 MVC 不会有 app-ui
-
好的,你的静态文件有什么共同点吗?
//your-domain/static/js/app.js中的static之类的东西 -
@Arkantos,不。我认为我在这种情况下犯了一个错误。如果这给我带来不调用过滤器的任何性能优势,我可以将它们移动到静态。此外,目前所有动态内容 url 都是 domain.com/
- 没有额外的斜杠。如果它是 domain.com/pathto/something - 我们可以假设这是 spring mvc 项目的静态文件。对于休息,我根本没有任何静态文件,除了这个 favicon.ico 出现在我的请求中。我的服务器上没有它的文件。也许我应该为它设置一个控制器并返回空体?
标签: java spring spring-mvc