背景:
老的项目是用springboot+jsp做的,现在需要对老的项目进行重构,集成swagger
项目技术栈:
springboot,jsp,swagger
问题
在集成springswagger的时候,请求是正常的,但是页面一片空白,什么都没有,通过检查,我发现返回的swagger-ui.html文件是不全的,与原本的文件对比,里面多了一些标签
问题就出在这上面,我通过全局搜索,定位到了这些加上去的内容是项目中某个defaul.jsp文件中的内容,不知道怎么被加到swagger-ui.html里面去了,从而导致文件被破坏,页面无法正常显示。
根因
项目里注册了一个SiteMeshFilter过滤器,匹配路径是根路径registrationBean.addUrlPatterns(“/*”),导致swagger的页面也被拦截了。
于是SiteMeshFilter也会把swagger的页面按照它的逻辑重新解析,就导致了原页面被破坏。
@Bean
public FilterRegistrationBean siteMeshFilterRegistration() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(siteMeshFilter());
registrationBean.setName("sitemesh");
registrationBean.addUrlPatterns("/*");
registrationBean.setOrder(1);
return registrationBean;
}
siteMeshFilter是opensymphony包里面的一个过滤器
至于opensymphony是什么可以参考这篇文章
https://blog.csdn.net/ccecwg/article/details/24125571
解决办法
将拦截器的匹配路径缩小到只拦截jsp的内容,解决。。。
@Bean
public FilterRegistrationBean siteMeshFilterRegistration() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(siteMeshFilter());
registrationBean.setName("sitemesh");
registrationBean.addUrlPatterns("/WEB-INF/*");
registrationBean.setOrder(1);
return registrationBean;
}