content: package com.sky.config;
  
  import com.sky.interceptor.JwtTokenAdminInterceptor;
  import com.sky.interceptor.JwtTokenUserInterceptor;
  import com.sky.json.JacksonObjectMapper;
  import lombok.extern.slf4j.Slf4j;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.http.converter.HttpMessageConverter;
  import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
  import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
  import springfox.documentation.builders.ApiInfoBuilder;
  import springfox.documentation.builders.PathSelectors;
  import springfox.documentation.builders.RequestHandlerSelectors;
  import springfox.documentation.service.ApiInfo;
  import springfox.documentation.spi.DocumentationType;
  import springfox.documentation.spring.web.plugins.Docket;
  
  import java.util.List;
  
  /**
   * 配置类，注册web层相关组件
   */
  @Configuration
  @Slf4j
  public class WebMvcConfiguration extends WebMvcConfigurationSupport {
  
      @Autowired
      private JwtTokenAdminInterceptor jwtTokenAdminInterceptor;
  
      @Autowired
      private JwtTokenUserInterceptor jwtTokenUserInterceptor;
      /**
       * 注册自定义拦截器
       *
       * @param registry
       */
      protected void addInterceptors(InterceptorRegistry registry) {
          log.info("开始注册自定义拦截器...");
          //后台
          registry.addInterceptor(jwtTokenAdminInterceptor)
                  .addPathPatterns("/admin/**")
                  .excludePathPatterns("/admin/employee/login");
  
          //客户端
          registry.addInterceptor(jwtTokenUserInterceptor)
                  .addPathPatterns("/user/**")
                  .excludePathPatterns("/user/user/login")
                  .excludePathPatterns("/user/shop/status");
      }
  
      /**
       * 通过knife4j生成接口文档
       * @return
       */
      @Bean
      public Docket docket1() {
          log.info("准备生成接口文档...");
          ApiInfo apiInfo = new ApiInfoBuilder()
                  .title("外卖项目接口文档")
                  .version("2.0")
                  .description("外卖项目接口文档")
                  .build();
          Docket docket = new Docket(DocumentationType.SWAGGER_2)
                  .groupName("管理端接口")
                  .apiInfo(apiInfo)
                  .select()
                  .apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin"))
                  .paths(PathSelectors.any())
                  .build();
          return docket;
      }
  
      @Bean
      public Docket docket2() {
          log.info("准备生成接口文档...");
          ApiInfo apiInfo = new ApiInfoBuilder()
                  .title("外卖项目接口文档")
                  .version("2.0")
                  .description("外卖项目接口文档")
                  .build();
          Docket docket = new Docket(DocumentationType.SWAGGER_2)
                  .groupName("用户端接口")
                  .apiInfo(apiInfo)
                  .select()
                  .apis(RequestHandlerSelectors.basePackage("com.sky.controller.user"))
                  .paths(PathSelectors.any())
                  .build();
          return docket;
      }
  
      /**
       * 设置静态资源映射
       * @param registry
       */
      protected void addResourceHandlers(ResourceHandlerRegistry registry) {
          log.info("开始设置静态资源映射...");
          registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
          registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
      }
  
      /**
       * 扩展spring MVC框架消息转换器
       * @param converters
       */
      protected void extendMessageConverters(List<HttpMessageConverter<?>> converters){
  
          log.info("扩展消息转换器...");
  
          //创建一个消息转换对象
          MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
  
          //设置对象转换器，将java对象转化为json
          converter.setObjectMapper(new JacksonObjectMapper());
  
          //将转换器加入到mvc框架容器里面
          converters.add(0,converter);
      }
  }
  