记录spring boot 整合shiro后 引入swagger2遇到的坑

Spring Boot整合Swagger及遇到的问题 前后端分离已成为主流的开发模式,前端工程师和后端工程师各自的职责分明,能更加专注于自己的领域,能很大程度的提高工作效率。前后端分离开发模式的关键在于有一份及时完整的API文档。这个文档一般由后端工程师编写,但随着项目的演进和平时对这些API的修改,这些API会发生改变,后端工程师有事忘记或懒得更新文档,导致前端工程师会一脸懵逼吗,增加了沟通成本。所以一个好的API文档工具很是必要。 下面我给大家... 阅读详情

先说结论:不要使用 2.9.2版本的swagger2,使用更低版本的 2.8.0

过程:

1、引入依赖

<!-- swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

2、Swagger2配置



@Configuration
@EnableSwagger2
@ConditionalOnProperty(name = "rssoft.swaggerEnable", havingValue = "true")
@Scope
public class SwaggerConfig {

    final String rootPackagePath = "com.rssoft.ykzly.api.controllers";



    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("公开分组")
                .apiInfo(apiInfo())
                .select()
                //控制器的包路径
                .apis(RequestHandlerSelectors.basePackage(rootPackagePath + ".OpenGroup"))
                .paths(PathSelectors.regex("/_open_/.*"))
                .build();
    }

    @Bean
    public Docket controllerInternalGroup() {
        ParameterBuilder tokenPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<>();
        tokenPar.name("token").description("用户token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
        pars.add(tokenPar.build());

        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("内部用户-接口分组")
                .apiInfo(apiInfo())
                .select()
                //控制器的包路径InternalGroup
                .apis(RequestHandlerSelectors.basePackage(rootPackagePath + ".InternalGroup"))
                .paths(PathSelectors.regex("/_internal_/.*"))
                .build()
                .globalOperationParameters(pars);
    }


    //构建 api文档的详细信息函数,注意这里的注解引用的是哪个
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                //页面标题
                .title("API文档")
                //描述
                .description("描述")
                .build();
    }
}

3、创建接口

  @ApiOperation(value = "添加使用者")
    @RequestMapping(value = "/consumer/create", method = RequestMethod.POST)
    public ApiResult consumerCreate(@RequestBody Consumer consumer,
                                    @ApiParam(name = "usableTimes", value = "使用次数", required = true) @RequestParam(value = "usableTimes", required = true, defaultValue = "") Integer usableTimes) {
        try {
            Device device = deviceService.getById(consumer.getDeviceNo());
            if (device.getAgentId() == null ) {
                return ApiResult.builder().status(false).message("请先绑定代理商!").build();
            }
            consumerService.addConsumer(consumer, usableTimes, device);
            return ApiResult.builder().status(true).message("添加成功!").build();
        } catch (Exception e) {
            e.printStackTrace();
            return ApiResult.builder().status(false).message("添加失败!").errors(e.getMessage()).build();
        }
    }

4、在shiroConfiguration 文件把拦截放开

   filterChainDefinitionMap.put("/swagger-ui.html","anon");
        filterChainDefinitionMap.put("/swagger/**","anon");
        filterChainDefinitionMap.put("/swagger2/**","anon");
        filterChainDefinitionMap.put("/webjars/**", "anon");
        filterChainDefinitionMap.put("/swagger-resources/**","anon");
        filterChainDefinitionMap.put("/v2/**","anon");

5、启动项目后控制台报类型转换异常

 6、在某度后查询解决方法后发现是swagger2自身错误,添加依赖可以解决

  <!-- swagger -->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.21</version>
        </dependency>

        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.21</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

7、访问页面后控制台无报错

 8、准备运行该接口时页面报这个错误,而且看不到实体类的models

Errors

Hide

Resolver error at paths./_internal_/device/consumer/create.post.parameters.0.schema.$ref

Could not resolve reference because of:

 

9、多方查询无果后受到某个帖子老哥的启发 准备降低swagger2的 版本

 <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.8.0</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>

10、运行后控制台无异常而且实体类的models可正常查看,问题解决。

前前后后被这些个问题折腾了接近俩个小时,记录一下遇到的这个坑,希望可以帮到和我遇到同样问题的兄弟!!

Spring Boot + Vue + Shiro 整合实战:构建企业级前后端分离应用 前后端分离架构是现代Web应用开发的主流模式,其核心在于通过RESTful API实现前后端职责解耦,后端专注于数据与业务逻辑,前端负责交互与展示。这种模式基于无状态通信原理,能有效支持并行开发与技术栈独立演进,其技术价值在于提升开发效率、增强系统可维护性与可扩展性。在实际工程实践中,该架构广泛应用于中后台管理系统、SaaS平台等需要清晰权限控制与高效协作的场景。本文聚焦于整合Spring Boot、Vue.js与Apache Shiro这一经典技术栈,深入探讨如何实现基于JWT的无状态认证与授权,并解决跨 阅读详情

相关推荐

Spring Boot整合Sa-Token实现动态权限控制实践

权限控制是Web应用开发中的核心安全机制,通过拦截器与注解等方式实现对系统资源的访问控制。Sa-Token作为轻量级Java权限认证框架,采用约定优于配置的设计理念,相比传统Shiro和Spring Security具有更低的学习成本和更简洁的API。其核心原理基于路由匹配和会话管理,通过StpUtil工具类提供开箱即用的登录验证、角色权限校验等功能。在技术价值方面,Sa-Token特别适合快速开发场景,仅需5行代码即可实现基础权限控制,同时支持动态路径排除等高级特性。典型应用场景包括CMS系统后台管理、A

angw337679452的博客 364

随手记一写BUG

平时遇到的BUG整理

coder_lcw的博客 1298

c764-基于Vue的实时温湿度监控系统

🌟 毕业设计指导交流 🌟 同学们好!作为一名计算机专业的技术爱好者,我在毕业设计领域积累了一些经验,希望能和大家分享交流。从选题到答辩,欢迎一起探讨技术问题。💡 技术方向: 熟悉Java全栈(SSM/Spring Boot)、Python数据分析、微信小程序/安卓开发等技术栈,可以互相学习项目开发经验。📂 学习资源: 整理了一些开源项目案例(含代码和文档),需要参考的同学可以留言讨论,也欢迎分享你的项目经验。🛠 交流内容:✨ 欢迎在评论区留言讨论,一起进步!记得遵守社区规范,保持学术

weixin_39513710的博客 1073

swagger页面上接口显示不全的问题

swagger使用注意

qq_42582773的博客 8056

qt工程引入opencv库步骤

第一步:新建qt工程 第二步:在工程名.pro文件中添加opencv库的路径                   INCLUDEPATH += /home/liyuanzhe/opencv-2.4.8/include/opencv \ /home/liyuanzhe/opencv-2.4.8/include/opencv2 LIBS += /home/liyuanzhe/open

superyuanzhe的专栏 5723

AI陪伴成瘾:青少年情感依赖的形成机制与家庭干预指南

大语言模型驱动的对话式交互,正从简单的信息应答演变为具备高度共情能力的AI陪伴工具。其核心原理是模型通过学习海量人类情感表达模式,实现即时共情、记忆唤起和个性化回应,从而形成情感粘性。这种技术在提供情绪支持上有独特价值,但也可能带来情感依赖风险——尤其是对现实社交缺失的青少年群体,他们容易在算法设计的“即时反馈”与“开放结局”中逐步退缩,甚至产生社会功能退化。因此,理解AI陪伴的成瘾机制,识别预警信号,并采用先连接后干预的家庭五步法,是防止虚拟关系替代现实社交的关键。

weixin_26712075的博客 122

springboot swagger2 与 shiro 集成采坑

1.集成了shiro之后,swagger2页面总是报错,报类型转换错误。swagger2 json转换错误。如果springboot采用gson做的json转换,必须自定义类转换。 @Bean public GsonHttpMessageConverter gsonHttpMessageConverter() { GsonHttpMessageConverter converter = new GsonHttpMessageConverter(); converter.setGson(new G

m0_67401134的博客 793

音视频入门:H264、H265概念总结

添加链接描述 什么是H.264与H.265 H.264与H.265都是视频压缩格式,由于视频本身的码流太大,所以需要经过压缩然后再通过网络进行传输。H.264是目前比较主流的压缩算法,像视频会议设备一般都采用这个编码格式。基础的H.264可以支持在1M带宽下传输720P30帧/秒的图像;H.264 HIGH PROFILE支持在512K带宽下传输720P30帧/秒的图像。 H.265是比较新的压缩算法,可以更一步提高压缩比,随着我们现在生活中出现的视频格式越来越大(比如现在基本都是1080P甚至4K的显示器

weixin_40673765的博客 8939

Swagger2.0不显示文档参数

description=“模块名称”,需要指定好,直接默认字符串不行的,模式是value。@ApiModel(description=“模块名称”)

qq_40886696的博客 1445

用LangFuse+LangChain打造可观测的AI应用:从埋点到成本监控实战

本文详细介绍了如何将开源可观测性平台LangFuse深度集成到基于LangChain构建的AI应用中,特别是电商客服机器人场景。通过从基础SDK集成、提示词管理到成本监控的完整实战,帮助开发者实现对LLM应用内部工作流的清晰追踪、问题排查与费用分析,从而打造稳定、可控的生产级AI应用。

dapp9builder的博客 711

电机控制实战:SVPWM五段式与七段式算法在STM32上的实现对比

本文深入对比了SVPWM五段式与七段式算法在STM32上的实现效果,详细分析了两种算法在占空比控制、开关损耗和波形质量等方面的差异。通过实测数据,为工程师提供了针对不同应用场景的选型建议,包括电池供电设备和高精度伺服控制系统的优化方案。

h6i7j8的博客 584

解决配置shiro+jwt后swagger接口文档无法访问的问题

昨天配置了jwt,结果打开swagger的doc.html时一直显示需要用户名和密码。原来是jwt拦截了,只需要在配置shiro时加上以下内容: /** * 定义拦截器链,所有请求都经过自定义的jwt过滤器 * * @return */ @Bean public ShiroFilterChainDefinition shiroFilterChainDefinition(){ DefaultShiroFilterChainDefini

qq_41358574的博客 1863

188、LLC谐振变换器的样机调试实战(EMI测试)

本文分享了LLC谐振变换器EMI调试的实战经验。作者通过300W电源案例,指出LLC的EMI问题主要来自谐振腔共模电流和死区振铃,并提出三板斧解决方案:优化功率回路布局、合理选择共模电感、正确配置X/Y电容。文章详细分析了谐振电容位置、MOSFET走线、变压器屏蔽等关键设计要点,并列举示波器探头、滤波器接地等常见误区。最后强调EMI调试70%依赖布局优化,建议预扫测试、数据记录并保留6dB余量。全文以实际案例贯穿,为LLC电源EMI设计提供了实用指导。

Jack010169的博客 59

shiro整合swagger2出现的循环依赖问题:defaultWebSecurityManager ,SpringfoxWebMvcConfiguration

shiro整合swagger2出现的循环依赖问题: *************************** APPLICATION FAILED TO START *************************** Description: The dependencies of some of the beans in the application context form a cycle: objectMappe...

qq_39594499的博客 3795

Gromacs 模拟昆虫 P450 解毒酶与农药结合完整指南,仅供参考!

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1243

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

记录 maven + spring boot + shiro 整合 swagger2 访问 404 和 服务端报类型转换错误

一、添加 swagger 相关依赖配置 1、添加 maven 依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </depend

CMEguagua的博客 856

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Spring Boot:整合Shiro权限框架

综合概述 Shiro是Apache旗下的一个开源项目,它是一个非常易用的安全框架,提供了包括认证、授权、加密、会话管理等功能,与Spring Security一样属基于权限的安全框架,但是与Spring Security 相比,Shiro使用了比较简单易懂易于使用的授权方式。Shiro属于轻量级框架,相对于Spring Security简单很多,并没有security那么复杂。 优势特点 它是一个...

c815852517的博客 209

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Spring Boot整合Shiro与JPA构建RBAC权限管理系统实战指南

权限管理是后台管理系统的核心基础设施,其核心模型是基于角色的访问控制(RBAC)。RBAC通过将用户、角色和权限进行解耦与关联,实现了灵活且可维护的访问控制逻辑。在Java生态中,Apache Shiro以其清晰的安全模型和相对平缓的学习曲线,成为实现RBAC的经典选择。结合Spring Boot的快速开发能力和JPA的ORM优势,可以高效构建出结构清晰、易于扩展的权限系统。本文聚焦于工程实践,详细解析如何整合Spring Boot、Shiro与JPA,实现从用户认证、密码加盐加密到基于注解的细粒度权限控制

weixin_33908217的博客 532

【新手须知】Spring Boot 2.0.0 + MyBatis + Shiro + Swagger 开发项目踩坑记录

写在前面 Swagger 2.8.0 Spring Boot 2.0.0.RELEASE Shiro 1.4.0 Mybatis 1.3.1 填坑 踩坑一: MyBatis xml文件中参数名选择 若UserMapper.java写法为 User findByUserId(int userId); 则在UserMapper.xml里参数名只能为arg0、arg1… ...

Michael Zhan的博客 3399

以后直接拿着用:SpringBoot+shiro+Swagger实现前后分离的框架

文章目录1、导包2、封装token3、编写过滤器4、编写凭证匹配器5、编写realm6、编写Swagger的配置文件7、编写shiro的配置文件8、编写项目的配置文件9、结果集的封装9.1、接口的封装9.2、返回信息码值和提示信息的封装9.3、返回数据的封装10、controller的编写11、Service的编写11.1、Service接口的编写11.2、Service实现的编写12、Mappe...

yuemmm的博客 579

spring-boot集成shiro+jwt框架(下载项目能直接用,简单易懂,里面惊喜多多)

spring-boot集成shiro+jwt框架,有git源码地址项目大体框架shiro+jwt装饰器模式实现整体aop切面操作文件上传使用FastDFSswagger工具类项目地址 项目大体框架 项目整体框架使用springboot + mybatis-plus + shiro +jwt,实现了简单的htpp传输加密,日志,防止xss攻击(没啥用),令牌桶,参数验证,统一异常处理。 shiro+jwt 具体实现请看代码,这里就不做截图了: 1.唯一注意的是shiroRealm里面注入的对象要么使用spr

zhangtao_sb的博客 381

springboot2.7.18 升级到3.1.5过程

Spring Boot3 从 2.7.10升级到3.1.5有以下几个点需要注意。JDK 17-19。

zhaofuqiangmycomm的博客 1709

Spring Boot+redis+JWT+shiro+mybatis 3+swagger2 前后端分离 企业级实战脚手架

Spring Boot+redis+JWT+shiro+mybatis 3+swagger2 前后端分离 企业级实战脚手架1. 实战脚手架搭建-创建项目基本骨架1.1 快速创建 Spring Boot 项目1.2 加入依赖1.2.1 数据库相关1.2.2 redis 相关1.2.3 swagger2 相关1.2.4 shiro 相关1.2.5 分页相关1.2.6 fastJson&lombok1.2.7 JWT 相关1.2.8 aop 相关1.2.9 热部署相关完整的pom2. 实战脚手架搭建-数据

深入Java世界:探索编程之美与技术深度 931

springboot+shiro+jwt实现登录+权限验证

一、简介: JWT优点: 1.基于Token的身份认证是无状态的,服务器或者Session中不会存储任何用户信息-应用程序可以根据需要扩展和添加更多的机器,而不必担心用户登录的位置。 2.支持跨域访问: Cookie是不允许垮域访问的,token支持。 3.解耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在 你的API被调用的时候, 你可以进行Token生成调用即可。 4.更适用于移动应用: Cookie不支持手机端访问,token支持。 5.性能: token生成

liu649983697的专栏 1844

基于Spring Boot的仓库管理系统

Spring Boot仓库管理系统是基于Spring Boot框架开发的,充分利用了Spring Boot的简洁性、高效性和模块化设计思想。该系统通过整合多种技术和框架,如Shiro、MyBatis、LayUI等,实现了对仓库的全面管理和控制。

qq_1744828575的博客 988
上一篇: 使用left join 查询后右表数据为空仍能查询出一条数据
chuangge_java
博客等级 码龄8年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值