Springmvc配置后缀.action后,怎么才能不拦截某些无后缀请求

Springmvc配置后缀.action后,怎么才能不拦截某些无后缀请求

该回答引用GPTᴼᴾᴱᴺᴬᴵ

在 Spring MVC 中,拦截器(Interceptor)是用于拦截 HTTP 请求的。可以通过配置拦截器来对请求进行统一的处理,例如鉴权、日志记录等。而拦截器可以通过配置来指定需要拦截的请求路径或 URL 模式,不需要拦截的请求则可以通过配置来排除。

假设你的 Spring MVC 配置文件中配置了后缀 .action,你可以通过配置拦截器来排除某些无后缀请求。例如,下面是一个配置拦截器的示例:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <mvc:exclude-mapping path="/test" />
        <bean class="com.example.interceptor.MyInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>


上面的配置中,<mvc:mapping path="/**" /> 表示匹配所有请求路径,而 <mvc:exclude-mapping path="/test" /> 表示排除路径为 /test 的请求,不对其进行拦截。你可以根据自己的需要修改相应的路径。

在编写拦截器时,可以实现 HandlerInterceptor 接口,并重写 preHandle 方法。在该方法中,你可以通过 HttpServletRequest.getRequestURI() 方法获取当前请求的 URI,根据 URI 的后缀判断是否需要拦截。

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String uri = request.getRequestURI();
        if (uri.endsWith(".action")) {
            // 需要拦截
            return false;
        } else {
            // 不需要拦截
            return true;
        }
    }
}


上面的示例中,如果请求的 URI 后缀为 .action,则返回 false,表示需要拦截;否则返回 true,表示不需要拦截。