WebMvcConfigurationSupport 静态资源失效问题

教程分享 > Java教程 > Spring (413) 2024-08-31 09:48:03

前言

在使用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 静态资源失效问题

 

 

https://www.leftso.com/article/2408310944466088.html

相关文章
Java编程中spring boot项目动态添加拦截器Interceptor
Spring Boot中的拦截器和过滤器都是用于在请求到达控制器之前或之后对请求进行处理的。区别如下:拦截器是基于Java的反射机制,而过滤器是基于函数回调。拦截器只能对Spring MVC的请...
前言在使用SpringBoot做项目时,需要使用拦截器判断用户是否登陆,来决定用户是否能访问某些页面。起初,通过继承来WebMvcConfigurerAdapt
Spring AOP 实现原理基础讲解
参考文章 ThreadLocal在线程池中被串用_threadlocal串数据-CSDN博客流程示意参考文章是过滤器Filter,我这里的情况差不多,拦截器,也
使用Spring Batch decorators对数据进行分类以写入多个目的地。当您在企业架构中工作以将数据传递/共享到多个系统时,这是非常方便的。Spring批处理中的装饰器是什么2.1。什...
Spring Security 配置多个Authentication Providers认证器
spring boot 1.5整合redis实现spring的缓存框架,spring boot,redis
Spring Boot 入门 AOP 日志处理,这里主要讲解spring boot 中采用AOP方式进行日志的统一处理。spring 框架的处理也是一样。综合来讲,本文主要讲解了spring b...
Spring Boot 1.x升级到Spring Boot 2.0迁移指南
Spring Boot 2.0,Spring框架的Spring Boot 中的Spring Boot Actuator变化讲解。并且了解如何在Spring Boot 2.0中使用Actuator...
java编程中spring框架5.0介绍说明/概述,spring5,spring框架,java编程
一、spring boot shiro 无状态token认证项目结构图​二、无状态spring boot shiro相关配置2.1shiro redis 缓存配置首先是实现shiro的cache...
Spring AOP来由,为何会出现Spring AOP这样的框架? 上一篇从Web开发演进过程的一个侧面简述了一下为什么会有Spring框架?事实上只介绍了为什么会有Spring IOC(控制...