跟着JHipster学做项目 (7) swagger-ui展现

Java技术变现新路径:基于JVM生态的工程化赚钱模型 Java作为一门成熟语言,其核心价值已从语法特性升维为JVM生态所承载的稳定性、向后兼容性与企业级信任背书。在等保合规、遗留系统现代化和垂直领域工具链等刚性需求驱动下,Java凭借字节码增强、Java Agent、ClassLoader热加载等原生能力,成为构建合规即服务(Compliance-as-a-Service)、遗留系统缝合层及微型SaaS的关键技术底座。它不追求性能极限,而以‘可审计、可验证、零改造集成’满足法务签字、运维背书与终端用户习惯三重决策节点。本文聚焦Java在2025年中小企业技术变 阅读详情

前面讲过使用Swagger2生成API文档,这里是关于直接在浏览器中展示API,并且可以在线测试API。着重从三个方面来概括一下swagger-ui展现:

  1. Spring Boot端如何启动swagger, 使后端可以接收/v2/api-docs和/swagger-resources请求,并返回相应的response(swagger.json, {url, name}).
  2. swagger-ui的前端代码生成
  3. Spring Boot后端和Vue前端如何处理请求的权限

JHipster通过引入jhipster-framework来启动swagger

        <dependency>
            <groupId>io.github.jhipster</groupId>
            <artifactId>jhipster-framework</artifactId>
        </dependency>

在io.github.jhipster.config.apidoc.SwaggerAutoConfiguration类中利用注解@EnableSwagger2启动swagger提供的两个服务,这里要注意,启动swagger设定了两个条件:

第一, profiles中必须包含swagger

第二,必须引入依赖springfox-swagger2, springfox-bean-validators,由于之前生成API文档的项目中是通过测试类生成swagger.json文件,通常会把scope设成test, 这里一定要去掉,否则swagger无法启动。

SwaggerAutoConfiguration类中包含了@Configuration注解,此外在/META-INF/spring.factories文件中配置了spring boot auto configuration

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  io.github.jhipster.config.apidoc.SwaggerAutoConfiguration,\
  io.github.jhipster.config.apidoc.SwaggerPluginsAutoConfiguration,\
  io.github.jhipster.config.JHipsterProperties,\
  io.github.jhipster.security.uaa.UaaAutoConfiguration,\
  io.github.jhipster.config.info.JHipsterInfoContributorConfiguration,\
  io.github.jhipster.config.metric.JHipsterMetricsEndpointConfiguration,\
  io.github.jhipster.config.metric.JHipsterLoggingMetricsExportConfiguration,\
  io.github.jhipster.security.ssl.UndertowSSLConfiguration

这样当spring boot启动的时候自动寻找第三方jar包中META-INF/spring.factories文件中的配置,自动加载jar包中相关配置,所以只要引入jhipster-framework, 并且profiles中包含swagger, swagger就可以成功启用,

spring:
  profiles:
    active: dev
    include:
      - swagger

检测swagger是否成功启用可以通过设定调试模式,来观察启动时日志是否包含swagger启动信息: Started Swagger in 6 ms

logging:
  level:
    ROOT: DEBUG
    io.github.jhipster: DEBUG
    com.mycompany.myapp: DEBUG
    org.springframework.web: DEBUG
    org.springframework.security: DEBUG

JHipster关于swagger权限控制后端有三个方面:

首先,对于swagger-ui/index.html页面的访问权限设定如下:

 @Override
    public void configure(WebSecurity web) {
        web.ignoring()
            .antMatchers(HttpMethod.OPTIONS, "/**")
            .antMatchers("/app/**/*.{js,html}")
            .antMatchers("/i18n/**")
            .antMatchers("/content/**")
            .antMatchers("/swagger-ui/index.html")
            .antMatchers("/test/**");
    }

然后是比较巧妙的方式来设定对/v2/api-docs和/swagger-resources的访问,

            .authorizeRequests()
            .antMatchers("/api/authenticate").permitAll()
            .antMatchers("/api/register").permitAll()
            .antMatchers("/api/activate").permitAll()
            .antMatchers("/api/account/reset-password/init").permitAll()
            .antMatchers("/api/account/reset-password/finish").permitAll()
            .antMatchers("/api/**").authenticated()

可以看到在安全配置中只对/api/**做了权限控制,这间接意味着可以对/v2/api-docs和/swagger-resources进行访问,而通常我们都是写成:

antMatchers("/**").authenticated()

最后对跨域访问的处理如下:

            source.registerCorsConfiguration("/api/**", config);
            source.registerCorsConfiguration("/management/**", config);
            source.registerCorsConfiguration("/v2/api-docs", config);

Vue前端安全处理是在请求中额外添加token信息

requestInterceptor: function(req) {
                    var authToken = localStorage.getItem("jhi-authenticationToken")
                        || sessionStorage.getItem("jhi-authenticationToken");
                    if (authToken) {
                        req.headers['Authorization'] = "Bearer " + authToken;
                    }
                    return req;
                }

JHipster没有在后端引入关于swagger-ui依赖,而是将swagger-ui代码放置在vue代码中,动态设定index.html中urls信息

var urls = [];
        axios.get("/swagger-resources").then(function (response) {
            response.data.forEach(function (resource) {
                urls.push({"name": resource.name, "url": resource.location});
            });

            urls.sort(function (a, b) {
                var x = a.name.toLowerCase(), y = b.name.toLowerCase();
                return x < y ? -1 : x > y ? 1 : 0;
            });

            // Build a system
            var ui = SwaggerUIBundle({
                urls: urls,
                dom_id: '#swagger-ui',
                deepLinking: true,
                filter: true,
                layout: "StandaloneLayout",
                withCredentials: true,
                presets: [
                    SwaggerUIBundle.presets.apis,
                    SwaggerUIStandalonePreset
                ],
                plugins: [
                    SwaggerUIBundle.plugins.DownloadUrl
                ],
                requestInterceptor: function(req) {
                    var authToken = localStorage.getItem("jhi-authenticationToken")
                        || sessionStorage.getItem("jhi-authenticationToken");
                    if (authToken) {
                        req.headers['Authorization'] = "Bearer " + authToken;
                    }
                    return req;
                }
            });

此文件经过webpack打包生成最终swagger-ui/index.html文件

const CopyWebpackPlugin = require('copy-webpack-plugin');   
 new CopyWebpackPlugin([
      { from: './node_modules/swagger-ui-dist/*.{js,css,html,png}', to: 'swagger-ui', flatten: true, ignore: ['index.html'] },
      { from: './node_modules/axios/dist/axios.min.js', to: 'swagger-ui' },
      { from: './src/main/webapp/swagger-ui/', to: 'swagger-ui' },
      { from: './src/main/webapp/content/', to: 'content' },
      { from: './src/main/webapp/favicon.ico', to: 'favicon.ico' },
      {
        from: './src/main/webapp/manifest.webapp',
        to: 'manifest.webapp'
      },
      // jhipster-needle-add-assets-to-webpack - JHipster will add/remove third-party resources in this array
      { from: './src/main/webapp/robots.txt', to: 'robots.txt' }
    ]),

最后我们会在浏览器中看到API列表:

swagger

Good Luck,

Cheers!

SQL Prompt 9.0插件突然无法使用解决办法(附防联网激活)多图+文字 可能由于Redgate公司最近抓盗版抓得严,导致激活后的SQL Prompt联网后突然无法使用,无论卸载重装都没办法继续使用,本人同时使用SQL Assistant和SQL Prompt,我喜欢SQL Assistant代码提示功能,而SQL Prompt我喜欢将查询结果复制后可以直接生产插入脚本,这是最爽的一件事,即便对表有多么熟悉,没有这些插件,几行语法都要敲大半天,目前本人已经离不开这两个插... 阅读详情

相关推荐

【Latex】【附安装文件】Miktex和TexStudio的安装与配置

这代表“构建并运行”,一般来说,我们只需要点这个按钮来运行Latex代码。保存一下代码文件,再运行一次,PDF文件会出现在与代码文件相同的文件夹下。安装完成后,你可能会跳转到一个页面中,你看到这个页面就意味着安装成功了。其实不需要你敲,你只要将下面的代码复制粘贴到你刚刚的文件中即可。成功安装MikTex后,我们需要进行更新,减少后续使用的麻烦。如果懂得将安装路径设置在你想要的盘中,你可以自己设置。双击上文的.exe文件后,你会看到如下画面。如果不懂,为避免不必要的麻烦,请直接点击“

未来就在脚下。 1万+

SwaggerUI初探

SwaggerUI介绍 SwaggerUI是我们小组在做课程作业,前后端交互需要API文档时,我无意间发现的一个工具。借助SwaggerUI,我们可以便捷的获得类似下方的可视化图形界面: 之后,我们便可以根据此“API文档”进行开发。 “Swagger UI 允许任何人(无论是你的开发团队还是最终用户)在没有任何实现逻辑的情况下对 API 资源进行可视化和交互。它(API文档)通过 Swagg...

liuyh73的博客 3664

安装m_map以及用matlab绘制高精度海岸线地图

#如何用matlab绘制高精度海岸线地图

qq_38512775的博客 1万+

Swagger-UI接口可视化工具的使用方法

paths(regex(DEFAULT_INCLUDE_PATTERN))//匹配路径生成对应接口文档。Step5. 测试: http://服务地址IP (localhost) +微服务端口+/swagger-ui.html。Step2.找到dist目录,将整个dist目录复制到需要使用Swagger-UI工具项目的resources目录下。Step1.下载: https://github.com/swagger-api/swagger-ui.git。//用于生成对应API接口文档的描述信息,可省略。

qq_63619425的博客 1034

华为海思IC设计岗位笔试全解析:物理、电路与工艺三大方向备考指南

本文全面解析华为海思IC设计岗位笔试的物理、电路与工艺三大方向备考要点。针对物理设计方向,重点讲解半导体能带理论、载流子输运机制等核心考点;电路设计方向涵盖Verilog语法、UVM验证等关键技术;工艺方向则深入探讨FinFET工艺、光刻技术等前沿知识。提供高效备考策略和应试技巧,助力考生提升通过率。

weixin_29196613的博客 1084

Openwork 入门指南:开源 AI 桌面助手快速上手

Openwork是一款开源的AI桌面代理工具,提供类似Claude Cowork的免费替代方案。它支持本地运行,确保隐私安全,并能高效处理文件整理、文档读写等任务。支持多种AI模型,通过MIT许可完全免费。安装简单,仅需运行命令行或下载桌面版,需配置API Key后即可使用。操作直观,支持多步骤规划和权限控制,适合自动化重复工作。目前主要支持macOS,未来将扩展至Windows/Linux。建议从简单任务入手,逐步掌握这一高效的数字助手工具。

3802

Jhipster框架简介及快速搭建项目

Jhipster是为您生成一个完整的现代Web应用程序或微服务架构: 它使用Spring Boot在服务器端实现高性能和强大的Java堆栈,这是一款时尚,现代,移动优先的前端,配有Angular,React和Bootstrap,一个强大的微服务架构。 1.环境搭建 从Oracle网站安装Java 8 。 从Node.js网站安装Node.js (请使用LTS 64位版本,不支持非LTS版本) n...

chd_sun的博客 2081

电磁兼容标准体系解析:从基础到认证的完整指南

本文系统解析了电磁兼容(EMC)标准体系,从基础概念到认证流程提供完整指南。文章阐述了EMC对于产品可靠性与市场准入的重要性,详细拆解了基础标准、通用标准、产品类标准及认证流程四层结构,并结合5G设备与工业控制等实战案例,为工程师提供了从设计初期到认证测试的高效应用策略。

weixin_29294975的博客 355

Angular上使用swagger-ui-dist

如果使用npm作为包管理器,可以尝试安装swagger-ui-dist,这是一个包含Swagger UI所有静态资源的包,可以直接在Angular应用中使用。在Angular项目的angular.json文件中,你需要配置资产(assets)部分,以便将Swagger UI的静态资源包含进来。新建assets/scss/swagger.scss自定义样式文件,自定义配置skin的dark皮肤样式。账号未登录时直接访问http://localhost:4200/#/swagger效果。

weixin_39565734的博客 627

OpenClaw 与十几款国产 “龙虾” 智能体深度对比

详解介绍OpenClaw和各种类似国产“龙虾”智能体工具深度对比

program哲学 2340

华为云物联网系统开发(纯云端)外包方案及项目需求说明书

提供一个详细的需求文档(SRS,Software Requirements Specification),用于指导完全零基础的非专业负责人外包兼职专业技术人员开发一款基于华为云物联网平台、Astro低代码平台和Astro Canvas大屏设计的物联网系统,纯软件实现并支持下载部署。文档涵盖详细的软硬件组成清单(聚焦软件和云服务)、技术文档要求等,确保非专业人员在移交后能够复用、扩展和操作该系统。本文档简洁、全面,适合非技术背景的管理者使用,并基于华为云生态的内部实施部署。

hy行者勇哥的博客 617

接口工具Swagger2和Swagger-UI的使用

找到刚刚下载好的Swagger-UI项目,进入项目并找到dist目录,将整个dist目录复制到需要使用Swagger-UI工具项目的resources目录下。dist目录中的文件主要就是一些css、js和html等文件,都是用来显示和渲染Swagger-UI工具页面的。通过引入Swagger-UI的配置,用户可以自动生成相应的可视化接口文档,并对项目中的接口进行测试。Swagger-UI是一款非常有用的工具,可以让任何人通过可视化的方式与后台服务端API接口方法进行交互,而无需实现任何逻辑。

weixin_51451545的博客 4997

小论文/大论文必备| YOLO26热力图可视化,支持8种常用热力图方法:GradCAM,GradCAMPlusPlus,XGradCAM,EigenCAM,HiResCAM等,助力小论文和大论文加分

本文介绍了如何为YOLO26模型添加热力图可视化功能,包括完整代码和使用教程。热力图能增强模型的可解释性,适用于论文中的实验对比和结果展示。文章提供了详细的代码实现,包含图像处理、热力图生成和结果可视化等功能,并指导用户如何创建Python文件、粘贴代码以及调整参数生成最佳热力图。通过设置不同层号,用户可以灵活控制热力图效果,最终结果将保存在指定文件夹中。

Ai缝合怪、助力小伙伴高效发论文 491

阿敦软件技术框架-跟着JHipster学做项目专栏

跟着JHipster学做项目(1)- MockMvc用法技巧 跟着JHipster学做项目(2) - 使用Swagger2生成API文档 (上)生成swagger的asciidoc文件 跟着JHipster学做项目(3) - Maven的使用技巧(上)分离jar和依赖 跟着JHipster学做项目(3) - Maven的使用技巧(下)去掉因lifecycle引起的红叉 跟着JHipster学做项目 (4)审计功能 跟着JHipster学做项目 (5) 异常处理(上)Spring Boot后端 跟

java_augur的专栏 4540

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JHipster 纯后端怎么替换原生swagger并在swagger配置jwt验证

最近刚入手学习JHipster,项目要进行完全的前后端分离,在jhipster --skip-client生成开发环境后,在完全脱离前端的情况下,想要通过类似Spring-boot后端配置swagger来进行API接口展示和调用测试 &lt;dependency&gt; &nbsp; &nbsp; &lt;groupId&gt;io.springfox&lt;/groupId&gt; &nb...

u013594885的博客 1536

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jhipster

jhipster: # 用于JHipster异步函数调用的线程池 async: core-pool-size: 2 # 初始化池大小 max-pool-size: 50 # 最大池大小 queue-capacity: 10000 # 池队列容量 # HTTP配置 http: ...

mao_jiu的博客 957

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Swagger+SpringCloud

Swagger是一种自动生成整合API文档的组件,将开发整理文档的工作与代码相结合,节省开发时间,增加工作效率。 Jhipster代码生成器锁生成的工程,已经整合了Swagger后端部分。 <dependency> <groupId>io....

chuqian1510的博客 1062

swagger2.x升级swagger3.0

swagger的2.x版本都是需要导入两个依赖包的,而3.0仅需要导入一个依赖,据说这是swagger社区整合的,但是个人感觉还不错,因为2.X已经停更了。 所以本人就对2.X系列进行升级,过程还是挺简单的。 首先注释掉原本的两个依赖,然后导入新的依赖。 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId&g

weixin_45369440的博客 3701

Jhipster Criteria 使用 (Specification前端) 条件查询

jhipster生成的实体如果启用了jpaMetamodelFiltering的话,back-end 的查询则会生成条件查询,这时候前端要怎么样传递查询条件过来,研究了下.记录下. 一开始是一脸懵逼的,直到看到了这段comment /** * Criteria class for the {@link com.library.generated.domain.Book} entity. This class is used * in {@link com.library.generated.web..

Damien_J_Scott的博客 615

JHipster使用前的环境配置

JHipster或者称Java Hipster,是一个应用代码产生器,能够创建Spring Boot + AngularJS + Bootstrap的应用,所以首先你要配置好Java的环境、Git以及Maven或者Gradle的环境,然后通过npm安装Jhipster所需的一些必要的工具。安装npm 去node.js的官网https://nodejs.org/en/去下载最新版的LTS版的node...

wolf909867753的专栏 1837

解决JHipster Register5.x不能正确解析uaa的api docs的问题

最近在家,无法出门,研究分布式系统的架构。主要使用JHipster构建,而其中最关键的就是注册中心。github上面已经更新到6.1.1的版本,二我们上次使用的版本是3.2.4,我决定研究5.x的版本,于是拉取来5.0.0的源码进行修改、构建、部署、测试。但是在测试过程中遇到一个问题,就是3.x和4.x版本的注册中心都能正确解析uaa的接口文档,但是5.x和6.x都不行,一直有以下提示 401...

宝华的小岛 733

自动化代码生成不是噱头:真实项目中的效率提升实证

摘要 本文探讨了自动化代码生成在实际项目中的效率提升价值。通过对比传统手动编码与自动化生成方式,展示了后者在Web API开发中的显著优势。文章以Spring Boot用户管理API为例,详细演示了从数据库设计到Controller层的完整代码生成过程,并分析了自动化工具如何减少重复劳动、保证代码一致性、降低维护成本。实证数据表明,自动化代码生成可节省70%以上的开发时间,使开发者能更专注于核心业务逻辑,而非样板代码编写。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

java+mysql+swagger-单表关联select、insert、update、delete操作(三)

路径:src/main/java/com/example/springbootmybatisplus/entity/Demo2.java。

susu要快乐的博客 1063

Spring Boot 后端开发详解:great-big-example-application 数据库配置与 RESTful API 设计

great-big-example-application 是一个基于 Spring Boot、Kotlin、Angular 4 等技术栈构建的全栈示例应用,本文将详细解析其数据库配置与 RESTful API 设计,帮助开发者快速掌握后端开发核心要点。 ## 一、数据库配置最佳实践 ### 1.1 多环境配置方案 项目采用 YAML 格式配置文件实现多环境隔离,核心配置位于 `src/ma

gitblog_00106的博客 508

SpringBoot之配置文件读取

下面我们来看一下 Spring 为我们提供了哪些方式帮助我们从配置文件中读取这些配置信息。 application.yml 内容如下: wuhan2020: 2020年初武汉爆发了新型冠状病毒,疫情严重,但是,我相信一切都会过去!武汉加油!中国加油! my-profile: name: Guide哥 email: koushuangbwcx@163.com library: location: 湖北武汉加油中国加油 books: - name: 天才基本法 de

猎户星座 299

express+ejs+swagger-ui-dist 打造及时更新的rest api 在线接口文档

Swagger 是restFul Api接口文档编写神器,这里介绍一个在nodejs环境下,应用express框架实现一个多项目接口文档服务器,并在云服务器上实现及时在线更新。一、创建express工程应用express 脚手架创建一个基于ejs模板引擎的工程,进入工程目录安装项目依赖express restapi --view=ejs cd restapi cnpm install二、添加依赖库...

ruglcc's blog 2523
上一篇: 跟着JHipster学做项目 (6) 安全访问控制(下)JWT的Vue前端应用
下一篇: 跟着JHipster学做项目 (8) 前后端分离项目刷新页面避免出现 white label
java_augur
博客等级 码龄22年 67粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值