一、问题描述:
在将老项目迁移到SpringBoot时,出现以下情况:1.项目正常启动;
2.访问某个后台接口,请求已进入对应的Controller,但浏览器还是显示404;
3.页面对应的js和css文件提示404
二、原因:
由于本人使用了自定义的SpringMvc的配置文件,所以覆盖了SpringBoot的默认配置,而我的配置文件中只有自定义的几个配置,所以会出现上述问题。
@Configuration
@ImportResource(locations={"classpath:spring/applicationContext-*.xml"})
public class SpringMvcConfig implements WebMvcConfigurer{
}
三、解决方案:
由于上述问题是由在SpringBoot中自定义SpringMvc相关配置不当引起的,故只需正确配置即可。例如需要自定义SpringMvc的拦截器:
1.SpringBoot 1.x
(1) 新建拦截器类,实现HandlerInterceptor接口即可:
public class SecurityInterceptor implements HandlerInterceptor {
/**
*
* Description: 判断用户是否已登录
* @param request
* @param response
* @param object
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
User user = (User) request.getSession().getAttribute("User");
if (user == null) {// 如果没有登录或登录超时
request.setAttribute("msg", "您还没有登录或登录已超时,为确您的保账户安全请重新登录!");
request.getRequestDispatcher("/noPermission.jsp").forward(request, response);
return false;
}
return true;
}
}
(2) 新建一个配置类,加上@Configuration注解并继承WebMvcConfigurerAdapter类,重写相关的方法。
@Configuration
public class SpringMvcConfig extends WebMvcConfigurerAdapter {
/**
*
* Description:配置自定义的SpringMvc拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/**").excludePathPatterns("/login.jsp",
"/other.jsp");
super.addInterceptors(registry);
}
}
2.SpringBoot 2.x
(1) 新建拦截器类(同上)
(2) 新建一个配置类,加上@Configuration注解并实现WebMvcConfigurer接口(注意:这里虽然是实现的是接口,但所有的方法在接口里都有默认实现的,这是基于java8的新特性,所以不必重写接口里的所有方法,只需要重写需要重写的方法),重写相关的方法。
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer{
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/");
}
}