WebMvcConfigurationSupport 静态资源失效问题

编程教程 > Java > Spring (440) 2024-11-26 14:39:04

前言

在使用SpringBoot做项目时,需要使用拦截器判断用户是否登陆,来决定用户是否能访问某些页面。
起初,通过继承来WebMvcConfigurerAdapter来注册拦截器,但是由于SpringBoot 2.0之后,就将WebMvcConfigurerAdapter废弃使用了,推荐使用WebMvcConfigurationSupport,但是使用WebMvcConfigurationSupport后发现网页不能获取到静态资源。

例如:

swagger-ui 接口文档无法访问  doc.html接口文档无法访问

Swagger问题:No mapping for GET /swagger-ui.html

 

历史配置:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.web.servlet.config.annotation.*;
@SpringBootConfiguration
public class AdminLoginAdapter extends WebMvcConfigurerAdapter {
   @Autowired
   AdminLoginInterceptor adminLoginInterceptor;
   @Override
   public void addInterceptors(InterceptorRegistry registry) {
       registry.addInterceptor(adminLoginInterceptor).addPathPatterns("/admin").excludePathPatterns("/login/**");
       registry.addInterceptor(adminLoginInterceptor).addPathPatterns("/index");
       super.addInterceptors(registry);
   }

这里提供两种解决方法:

一、重写 addResourceHandlers()方法,加入静态文件路径


package com.donglei.myblog.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.web.servlet.config.annotation.*;
@SpringBootConfiguration
public class AdminLoginAdapter extends WebMvcConfigurationSupport {
   @Autowired
   AdminLoginInterceptor adminLoginInterceptor;
   @Override
   public void addInterceptors(InterceptorRegistry registry) {
       registry.addInterceptor(adminLoginInterceptor).addPathPatterns("/admin").excludePathPatterns("/login/**");
       registry.addInterceptor(adminLoginInterceptor).addPathPatterns("/index");
       super.addInterceptors(registry);
   }
   @Override
   public void addResourceHandlers(ResourceHandlerRegistry registry) {
   //重写这个方法,映射静态资源文件
       registry.addResourceHandler("/**")
               .addResourceLocations("classpath:/resources/")
               .addResourceLocations("classpath:/static/")
               .addResourceLocations("classpath:/public/");
       super.addResourceHandlers(registry);
   }
}


实践证明,这种方法行之有效,但是有的朋友可能表示,这种方法还是有问题,那就第二种方法,实现WebMvcConfigurer接口

二、实现WebMvcConfigurer接口 【推荐方案】

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.web.servlet.config.annotation.*;
@SpringBootConfiguration
public class AdminLoginAdapter implements WebMvcConfigurer {
   @Autowired
   AdminLoginInterceptor adminLoginInterceptor;
   @Override
   public void addInterceptors(InterceptorRegistry registry) {
       registry.addInterceptor(adminLoginInterceptor).addPathPatterns("/admin").excludePathPatterns("/login/**");
       registry.addInterceptor(adminLoginInterceptor).addPathPatterns("/index");
       //super.addInterceptors(registry);
   }
}

这样,就解决了WebMvcConfigurationSupport 静态资源失效问题

 

 


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
Java编程中spring boot项目动态添加拦截器Interceptor
Spring Boot中的拦截器和过滤器都是用于在请求到达控制器之前或之后对请求进行处理的。区别如下:拦截器是基于Java的反射机制,而过滤器是基于函数回调。拦截器只能对Spring MVC的请...
前言在使用SpringBoot做项目时,需要使用拦截器判断用户是否登陆,来决定用户是否能访问某些页面。起初,通过继承来WebMvcConfigurerAdapt
mybatis Interceptor拦截器实现自定义扩展查询兼容mybatis plus @Intercepts({ @Signature(type = Executor.c...
参考文章 ThreadLocal在线程池中被串用_threadlocal串数据-CSDN博客流程示意参考文章是过滤器Filter,我这里的情况差不多,拦截器,也
前言引用《Vert.x 4 Web REST CRUD接口应用》项目,加入日志依赖并编码实现类似Interceptor功能处理。vert.x日志集成参考《Ver
使用Spring Batch decorators对数据进行分类以写入多个目的地。当您在企业架构中工作以将数据传递/共享到多个系统时,这是非常方便的。Spring批处理中的装饰器是什么2.1。什...
项目源码下载:(访问密码:9987)Spring-Cloud-Circuit-Breaker.zip学习在调用底层微服务的同时利用调用的Spring Cloud Netflix堆栈组件之一Hys...
Spring Security 配置多个Authentication Providers认证器
学习创建和配置使用JSP 模板文件渲染视图层的Spring Boot jsp 视图解析器
Spring Context 与Spring MVC Context那些坑
Spring Boot 入门 AOP 日志处理,这里主要讲解spring boot 中采用AOP方式进行日志的统一处理。spring 框架的处理也是一样。综合来讲,本文主要讲解了spring b...
spring boot 1.5整合redis实现spring的缓存框架,spring boot,redis
Spring WebFlux,spring框架5.0将会新增的web增强框架,这里主要讲述什么是Spring WebFlux以及Spring WebFlux的新功能,Spring WebFlux...