gpt4 book ai didi

java - 如何避免静态资源请求被路由到拦截器?

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:53 25 4
gpt4 key购买 nike

我正在使用最新的 Spring (4.1.1) 和 tomcat 7.0.52 。我启用了注释驱动的 mvc。

在我的应用程序中,我定义了一个拦截器:

<mvc:interceptors>
<bean class="com.abc.UserAgentChangeInterceptor"/>
</mvc:interceptors>

此外,我定义了资源:

<mvc:resources mapping="/static/**/*" location="/desktop"/>
<mvc:resources mapping="/**/*.css" location="/"/>
<mvc:resources mapping="/**/*.js" location="/"/>
<mvc:resources mapping="/**/*.gif" location="/"/>
<mvc:resources mapping="/**/*.htm" location="/"/>
<mvc:resources mapping="/**/*.svg" location="/"/>
<mvc:resources mapping="/**/*.png" location="/"/>

但是,当请求进来时,即使是静态资源/ Assets ,它们仍然会首先路由到拦截器。

我知道以下做法可以解决该问题:

  1. mvc:interceptor 中使用 mvc:exclude-mapping 来排除路由到我的拦截器的上述 url 上发出的请求,但这似乎违反了 DRY 原则,而且我真的不喜欢这种外观和感觉。

  2. 在拦截器上使用mvc:mapping。但是,我在很多处理程序上使用注释驱动的 @RequestMapping ,并且有很多不同的路径。该解决方案对我来说也不太有效。

我还发现使用 @ControllerAdvice 而不是拦截器可以帮助缓解问题,但根据我通过阅读 Spring 文档了解到的内容,@ControllerAdvice 没有任何类似于 preHandle() 的方法在 @Controllers 之前执行

我仍然更喜欢使用 Spring XML 配置方法来解决这个问题,而不是在我的应用程序中定义一个 @Configuration 类。只是一个惯例。

任何意见都深表感谢!

最佳答案

方法1:在拦截器配置中使用映射路径

<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/path" />
<bean
class="bean" />
</mvc:interceptor>
</mvc:interceptors>

方法 2:与 mvc:resources 一起指定

<mvc:annotation-driven/>

关于java - 如何避免静态资源请求被路由到拦截器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31175429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com