继承 WebMvcConfigurationSupport类后无法访问Swagger页面问题
文章目录
- 介绍WebMvcConfigurationSupport:
- ResourceHandlerRegistry:
- 自己项目原代码:
- 修改后:
项目中为了注册拦截器写了一个配置类继承
WebMvcConfigurationSupport,结果居然无法访问Swagger的接口文档了(localhost:xxxx/doc.html),最后发现是WebMvcConfigurationSupport将静态资源都禁止访问了,需重写一个资源拦截策略
介绍WebMvcConfigurationSupport:
这是提供 MVC Java 配置背后的配置的主类。 它通常通过将@EnableWebMvc添加到应用程序@Configuration类来导入。 另一种更高级的选项是直接从此类扩展并根据需要覆盖方法
记住将@Configuration添加到子类和@Bean以覆盖@Bean方法。 有关更多详细信息,请参阅@EnableWebMvc的 javadoc。
此类注册以下HandlerMappings :
RequestMappingHandlerMapping排序为 0,用于将请求映射到带注释的控制器方法。
HandlerMapping在 1 处排序以将 URL 路径直接映射到视图名称。
BeanNameUrlHandlerMapping在 2 处排序以将 URL 路径映射到控制器 bean 名称。
RouterFunctionMapping在 3 RouterFunctionMapping订购以映射路由器功能。
在WebMvcConfigurationSupport类中addResourceHandlers是一个空方法:
/*** Override this method to add resource handlers for serving static resources.* @see ResourceHandlerRegistry*/protected void addResourceHandlers(ResourceHandlerRegistry registry) {}
ResourceHandlerRegistry:
存储资源处理程序的注册,用于通过 Spring MVC 提供静态资源,例如图像、css 文件和其他资源,包括设置为在 Web 浏览器中高效加载而优化的缓存标头。 可以从 Web 应用程序根目录下的位置、类路径和其他位置提供资源。
要创建资源处理程序,请使用addResourceHandler(String…)提供应为其调用处理程序以提供静态资源(例如"/resources/…" )的 URL 路径模式。
然后在返回的ResourceHandlerRegistration上使用其他方法来添加一个或多个从中提供静态内容的位置(例如 { “/” , “classpath:/META-INF/public-web-resources/” })或指定缓存服务资源的时间。
addResourceHandler方法:添加资源处理程序以提供静态资源。 为匹配指定 URL 路径模式之一的请求调用处理程序。
支持诸如"/static/**“或”/css/{filename:\w+\.css}"类的模式。
源码:
public ResourceHandlerRegistration addResourceHandler(String... pathPatterns) {ResourceHandlerRegistration registration = new ResourceHandlerRegistration(pathPatterns);this.registrations.add(registration);return registration;
}
自己项目原代码:
@Configuration
//
@EnableTransactionManagement
public class MyConfig extends WebMvcConfigurationSupport {@Autowired
private RepeatInterceptor repeatInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry)
{registry.addInterceptor(repeatInterceptor);}//super.addInterceptors(registry)// .excludePathPatterns("/doc.html") ;//添加重复提交的拦截器}
修改后:
@Configuration
//
@EnableTransactionManagement
public class MyConfig extends WebMvcConfigurationSupport {//在配置拦截器时,可以继承WebMvcConfigurationSupport,也可以实现WebMvcConfigurer,但继承WebMvcConfigurationSupport类是会导致自动配置失效的。////这是因为在 springboot的web自动配置类 WebMvcAutoConfiguration 上有条件注解////@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)////这个注解的意思是在项目类路径中 缺少 WebMvcConfigurationSupport类型的bean时改自动配置类才会生效,所以继承 WebMvcConfigurationSupport 后需要自己再重写相应的方法。////这时候就需要重新指定静态资源@Autowired
private RepeatInterceptor repeatInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry)
{registry.addInterceptor(repeatInterceptor).excludePathPatterns("/doc.html");}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");super.addResourceHandlers(registry);}}
再次访问项目路径的doc.html:
继承 WebMvcConfigurationSupport类后无法访问Swagger页面问题相关推荐
- Spring Boot——自定义Web配置类后无法访问/static文件夹下静态资源
问题描述 自定义Web配置类后无法访问 /static文件夹下静态资源. 已加相关依赖包. 官方文档 Spring MVC Auto Configuration Maven <dependenc ...
- 若依框架在未登录的情况下访问swagger页面
本文针对若依单体项目,解决若依在不登录情况下,如何直接访问swagger页面. 框架默认在未登录的情况下,是不能直接访问swagger页面的. 最近很多人在问,为什么明明在ShiroConfig里面对 ...
- 界面登录、登陆后才能访问另外页面
1.//登录页面 <!DOCKTYPE html> <html> <head runat="server"> <meta http ...
- javaWeb项目用过滤器filter实现登陆成功后才能访问主页面,否则直接输入主页面的地址自动跳转到登陆界面
想用Filter实现一个登陆验证的功能,实现登陆成功后才能访问主页面,否则直接输入主页面的地址会自动跳转到登陆界面 原理很简单,每次登陆成功后,创建一个session域对象,将登陆成功的用户名保存在s ...
- tomcat部署项目成功后,访问任何页面都是空白页,不报404异常
tomcat部署项目成功后,访问任何页面都是空白页,不报404异常 项目部署成功: 页面空白: 输入一个错误的地址,也是空白: 原因是设置的CharchaterFilterr过滤器是全局筛选: @We ...
- springboot的WebMvcConfigurerAdapter学习(现在常用实现webmvcConfigurer接口和继承WebMvcConfigurationSupport类)
1.定义 是Spring内部的一种配置方式 采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制 2.使用 /** 解决跨域问题 **/ public void addCor ...
- web项目中实现登陆成功后才能访问某些页面,否则自动跳转到登陆界面,以及对无限循环重定向的解决
1.不使用过滤器实现,在需要拦截的页面通过session判断是否登陆,若没登陆则跳转到login.jsp页面: <% Admin admin = (Admin)session.getAttrib ...
- chrome升级后无法访问iframe页面
现象: Google chrome升级,升级后版本 修改下面设置: chrome://flags/#same-site-by-default-cookies ,设置为 Disabled chrome: ...
- SpringBoot实现未登录时不能访问数据页面
从所周知,如果从开始阶段大家实现未登录时只能访问首页和登录页面的基本都是通过servlet + Filter(过滤器)来实现的,而在SSM整合时也是大同小异,现在介绍一下通过SpringBoot来实现 ...
最新文章
- api工程IOS学习:在IOS开发中使用GoogleMaps SDK
- linux 内核3.1,NVIDIA发布了新的Tegra Linux开发包,内核为3.1.x
- mysql创建与更新时间字段
- 为什么女生会有体香?
- pycharm不同py文件共享参数_PyCharm安装笔记
- 数学生物学:生命是数字游戏
- 【渝粤教育】国家开放大学2018年秋季 1141t工程经济与管理 参考试题
- 拓端tecdat|R语言缺失值的处理:线性回归模型插补
- HelixQAC(QAC/QAC++)静态测试工具-软件代码安全漏洞检测工具试用
- 软件测试系统性总结思维导图
- 笔记本外接2K显示器
- linux读取触摸屏事件数据
- 解决eclipse桌面快捷方式打不开的问题
- WampServer 3.1.0 所需VC运行库下载及安装说明
- chrome regedit 崩溃_谷歌浏览器网页崩溃的解决方法
- 金融网络安全和反欺诈方法论,金融新兴技术成熟度几何?
- 三角函数曲线(含具体分析过程)
- 无线AP(Access Point)是什么
- Leetcode学习网站
- unity--google支付--billing4.0
热门文章
- linux 内核维护,Linux 4.18内核系列生命周期结束:用户需尽快更新内核
- 语言 双线性内插_合资插混间的实力较量,微蓝6 PHEV和卡罗拉双擎E+谁更值得选...
- capsule 安装_CAPSULE SERVANT安卓版下载-CAPSULE SERVANT手游app安装-菜鸟下载
- 【数据结构与算法-2】链表
- 向io设备发出中断请求_人们常说的计算机设备管理是什么,深入解读计算机设备管理...
- Java web应用引用外部jar包 运行时报ClassNotFoundException 解决方法
- Mysql和mono,.net – Mac OS X Mono和MySql连接器问题
- mysql踢掉登录用户_centos 强制踢掉某登录用户的方法
- linux查看samba目录的配额,问Samba中一个共享目录,怎么限制其容量大小?不是用户级quota!!...
- QM法化简C语言程序,QM基础教程