Knife4j文档请求异常(更新)

这篇具有很好参考价值的文章主要介绍了Knife4j文档请求异常(更新)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 多模块注解不当引起

在SpringBoot项目中,如果是分不同的模块开发。
注解配置 @EnableSwagger2WebMvc不在启动类上,而是加到了其他模块的注解中,可能会导致这种情况发生。

我的是common一个单独的模块,在common模块中配置了WebMvcConfig。
然后在WebMvcConfig类上面加了注解@EnableSwagger2WebMvc.

那么,解决方法也很简单,在启动类上也添加上注解@EnableSwagger2WebMvc即可。

/**
 * @Author: KingWang
 * @Date: 2023/4/9
 * @Desc:
 **/
@Slf4j
@Configuration
//@EnableSwagger2WebMvc 分模块下,这个注解不在启动类模块中,是无效的
public class WebMvcConfig extends WebMvcConfigurationSupport {


    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        //swagger文档需要添加下面2行
        registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    /**
     * 扩展mvc框架的消息转换器
     * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器...");
        //创建消息转换器对象
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        //设置对象转换器,底层使用Jackson将java对象转为Json
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        //将上面的消息转换器对象追加到mvc框架的转换器容器中
        converters.add(0, messageConverter);
    }


    @Bean
    public Docket adminApiConfig(){
        List<Parameter> pars = new ArrayList<>();
        ParameterBuilder tokenPar = new ParameterBuilder();
        tokenPar.name("token")
                .description("用户token")
                .defaultValue("")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build();
        pars.add(tokenPar.build());
        //添加head参数end

        Docket adminApi = new Docket(DocumentationType.SWAGGER_2)
                .groupName("adminApi")
                .apiInfo(adminApiInfo())
                .select()
                //只显示admin路径下的页面
                .apis(RequestHandlerSelectors.basePackage("com.guigutool.system.controller"))
                .paths(PathSelectors.regex("/admin/.*"))
                .build()
                .globalOperationParameters(pars);
        return adminApi;
    }

    private ApiInfo adminApiInfo(){

        return new ApiInfoBuilder()
                .title("后台管理系统-API文档")
                .description("本文档描述了后台管理系统微服务接口定义")
                .version("1.0")
                .contact(new Contact("guigutool", "http://guigutool.com", "guigutool@qq.com"))
                .build();
    }
}

启动类中加上该注解:

@EnableSwagger2WebMvc
@SpringBootApplication
@MapperScan("com.guigutool.system.mapper")
public class ServiceAuthApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceAuthApplication.class,args);
    }
}

2. SpringSecurity白名单问题

白名单设置的不全或者不一致导致的。
在SpringSecurity中我们通常会增加配置类SecurityConfig如下设置:

@EnableGlobalMethodSecurity(prePostEnabled = true)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

private static final String[] http_ignore_path = {"/v2/**","/swagger-resources","/webjars/**","/favicon.ico","/doc.html","/log/*","/admin/system/index/login/"};

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.csrf().disable()  //关闭csrf
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and().cors().configurationSource(corsConfigurationSource())
        .and()
        .authorizeRequests()
        .antMatchers(http_ignore_path).permitAll()
        .anyRequest().authenticated();

        //添加用户认证过滤器
        http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);


        //认证和权限
        http.exceptionHandling().accessDeniedHandler(accessDeniedHandler)
                .authenticationEntryPoint(authenticationEntryPoint);
    }

}

这里要特别注意http_ignore_path 这个数组设置的白名单。
Knife4j需要配置的白名单如下:

private static final String[] http_ignore_path = {"/v2/**","/swagger-resources","/webjars/**","/favicon.ico","/doc.html","/log/*","/admin/system/index/login/"};

除了最后两个"/log/*“,”/admin/system/index/login/"是日志和登录接口以外,其他的都需要放行。
之前设置登录接口的时候一直也是卡住,即使添加了白名单也不放行,后来仔细检查终于发现登录的请求地址写错了。
可以先在过滤器中打印出请求的URL信息如下:

        String requestURI = request.getRequestURI();
        log.info("请求URI:" + requestURI);

这样可以看到请求的地址信息,然后将这里显示的URI信息,然后将这里的信息填写到白名单中。
自己曾经在白名单中写登录请求地址时,多加了一个/ 导致一直登录失败。
knife4j文档请求异常,Java,疑难杂症才是精华,java,spring,servlet文章来源地址https://www.toymoban.com/news/detail-801959.html

到了这里,关于Knife4j文档请求异常(更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • knife4j API文档生成使用流程及详解

    目录 初始化流程 详细注解分析 @Api @ApiOperation @ApiModelProperty @ApiImplicitParam @ApiImplicitParams @ApiIgnore         1:pom文件引入相关依赖 2:创建配置类 3:默认访问域名+端口+doc.html         类上         tags:配置模块的名称         方法上         value:配置业务名称        

    2024年02月05日
    浏览(78)
  • 访问微服务模块的knife4j文档页面,报404

    原因:访问knife4j需要静态资源,在拦截器中配置添加即可。 解决方案: 继承WebMvcConfigurationSupport类,重写addResourceHandlers()方法。

    2024年02月12日
    浏览(26)
  • 【SpringBoot笔记42】SpringBoot集成knife4j生成接口文档

    这篇文章,主要介绍SpringBoot如何集成knife4j及生成接口文档。 目录 一、knife4j接口文档生成器 1.1、接口文档工具介绍 1.2、引入依赖

    2024年02月05日
    浏览(27)
  • 【SpringBoot】SpringBoot引入接口文档生成工具(Swagger+Knife4j)

    由于目前工作项目写的接口越来越多了,为了能够更加方便地优化接口,以及整理接口文档,所以就考虑引入接口文档生成工具。目前的接口文档生成工具被提及较多的是Swagger,经过了引入尝试后,Swagger是比较轻松地就被引入了。但是Swagger页面属实是难以恭维,比较简单但

    2024年01月23日
    浏览(35)
  • Spring Cloud Gateway 网关整合 Knife4j 4.3 实现微服务接口文档聚合

    🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正! youlai-mall 开源微服务商城新版本基于 Spring Boot 3 和 Java 17,同时采用 Knife4j 4.3。与以前版本不同的是

    2024年02月05日
    浏览(44)
  • Spring Boot 集成 API 文档 - Swagger、Knife4J、Smart-Doc

    Swagger 作为 API 设计和文档的强大工具,是一个由专门的工具集合支持的框架,它在整个 API 的生命周期中发挥作用,从设计和文档,到测试和部署。通过提供可视化界面,Swagger 让开发人员和最终用户都能清晰地理解和操作 API。 使用建议:笔者建议优先考虑 Knife4J,它已经能

    2024年01月22日
    浏览(52)
  • Spring Cloud Gateway + Knife4j 4.3 实现微服务网关聚合接口文档

    🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正! youlai-mall 开源微服务商城新版本基于 Spring Boot 3 和 Java 17,同时采用 Knife4j 4.3。与以前版本不同的是

    2024年02月08日
    浏览(32)
  • springboot配置swagger/knife4j时出现的Unresolvable class definition for class …异常

    抽取出其中的关键原因描述: nested exception is java.lang.IllegalArgumentException: Unresolvable class definition for class [springfox.documentation.spring.web.OnServletBasedWebApplication] springfox.documentation.common.ClassPresentInClassPathCondition 进行原因排查后,发现是依赖之间版本问题的冲突导致,下面提供一个能

    2024年02月12日
    浏览(38)
  • Knife4j框架介绍

    Knife4j是一款基于Swagger 2的在线API文档框架,是日常开发中很常用的框架,基于此框架,后端可以和前端开发人员进行高效沟通。 使用Knife4j框架只需要以下三步: 1:添加Knife4j的依赖 (当前建议使用的Knife4j版本,只适用于Spring Boot 2.6以下版本,不含Spring Boot 2.6) 2:在主配置

    2024年02月13日
    浏览(26)
  • SpringBoot整合Knife4j

    ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot整合Knife4j 📚个人知识库: Leo知识库,欢迎大家访问

    2024年04月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包