spring mvc怎么修改mapping匹配顺序

正常情况下 访问一个a.jpg 图片文件时,先通过DefaultAnnotationHandlerMapping 来找control ,control没有这个action ,然后Order升序后从SimpleUrlHandlerMapping里匹配。 我想先走SimpleUrlHandlerMapping里去匹配再去DefaultAnnotationHandlerMapping里去匹配,应该怎么写,最好有实际代码。谢谢各位大佬

你是用这个通配Action实现restful的吗,如果是,在这个action中放行才行

springmvc.xml中配置加入
mvc:default-servlet-handler/

<mvc:resources mapping="/static/**"
    location="/static/" cache-period="31536000" />

    <!-- 对静态资源文件的访问, 将无法mapping到Controller的path交给default servlet handler处理 -->
<mvc:default-servlet-handler />

你这个情况可能是缺了第一个配置,将你静态资源的url路径和本地文件路径配置下

在服务端添加个请求跳转不就行了

package cn.momosv.springboot.interceptor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.*;

@Configuration

public class MvcConfig extends WebMvcConfigurerAdapter {
@Autowired
UserLoginInterceptor userLoginInterceptor;

//省略部分代码
@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(userLoginInterceptor).addPathPatterns("/**");
}

}

package cn.momosv.springboot.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import cn.momosv.springboot.bean.User;

@Component
public class UserLoginInterceptor implements HandlerInterceptor {

/**
 * 用来存储不拦截的路径
 */
private static final String[] IGNORE_URI = {"/sys","/druid","webjars"};
@Value("${server.port}")
private String port;

// @Value("${server.address}")
// private String address;
@Value("${server.context-path}")
private String contextPath;

@Value("${server.cloudAddress}")
private String cloudAddress;

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {
    System.out.println("开始preHandle,判断请求是否需要拦截");
    boolean flag = false;
    String servletPath = request.getServletPath();
    System.out.println("请求路径是: "+servletPath);
    cloudAddress=request.getLocalAddr().toString().equals("10.135.181.103")?cloudAddress:"localhost";
    request.setAttribute("basePath", "http://"+cloudAddress+":"+port+contextPath);
    // 检测是否为需要拦截的请求
    for (String s : IGNORE_URI) {
        if (servletPath.contains(s)) {
            System.out.println("该请求不需要拦截");
            flag = true;
        }

    }
    // 需要拦截处理的请求
    if (!flag) {
        // 获取存储在session域的用户
        User user = (User) request.getSession().getAttribute("user");
        if (user == null) {
            System.out.println("拦截请求:用户未登录,禁止直接访问,返回登录页面");
            request.setAttribute("message", "请先登录");
            response.sendRedirect("/sys/login");  
            // 服务器内部转发,可以带回request
        }
        else {
            System.out.println("拦截请求:用户已经登录,可以成功浏览网页");
            flag = true;
        }
    }
    return flag;


}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {

    System.out.println("拦截请求之后");
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    System.out.println("控制器处理完成之后");

}

}

我的拦截器