Swagger UI 配置,以及整合spring security OAuth使用配置

Spring Boot项目Swagger UI访问安全实践:Spring Security集成与配置详解 在API开发与文档管理中,Swagger UI作为一款流行的API文档可视化工具,极大地方便了前后端联调与接口测试。其核心原理是通过解析代码注解自动生成符合OpenAPI规范的交互式文档。然而,默认无保护的访问方式在开发、测试等非生产环境存在安全风险,可能导致接口信息泄露或未授权调用。从技术价值看,实施访问控制是保障API资产安全、遵循最小权限原则的基础工程实践。常见的应用场景包括开发环境隔离、测试环境准入以及内部工具保护。本文聚焦于在Spring Boot项目中,如何利用Spring Security框架 阅读详情

需要的Maven 依赖;


        <!-- swagger ui 相关依赖-->
        <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>

 

效果图:

 废话不多说,直接上代码,详情请看注释:

package top.test.blogs.config;

import com.google.common.base.Predicates;
import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.OAuthBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import top.copying.blogs.properties.IgnoreUrlProperties;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @author copying
 * @date 2020-08-29 10:45:36
 */
@Configuration
@EnableSwagger2
public class Swagger2Config {
    /** 过滤的URL */
    @Resource
    private IgnoreUrlProperties ignoreUrlProperties;
    /**
     * apis扫描com路径下的api文档.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
     *  .apis(RequestHandlerSelectors.basePackage("top.copying.blogs"))
     * paths路径判断
     * @return Docket
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(Collections.singletonList(securityScheme()))
                .securityContexts(Collections.singletonList(securityContext()));
    }

    /**
     * title标题
     * description 描述
     * termsOfServiceUrl(不可见)条款地址
     * version版本号
     * @return ApiInfo
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Copying Blogs Service")
                .description("个人博客功能接口")
                .termsOfServiceUrl("http://www.baidu.com")
                .version("1.0")
                .build();
    }

    /**
     * 2020-08-29 09:48:35 copying add
     * 添加在Swagger ui中实现登录功能
     * securitySchemes()方法配置里增加需要token的配置。
     * 配置完成后,swagger-ui.html里右上角会有一个Authorize的按钮,录入该token即能成功调用相关接口
     * //.grantTypes(Collections.singletonList(grantType))
     * @return SecurityScheme
     */
    private SecurityScheme securityScheme(){
        return new OAuthBuilder()
                .name("spring_oauth")
                .grantTypes(grantTypes())
                .scopes(Arrays.asList(scopes()))
                .build();

    }

    /**
     * 设置使用什么模式
     * 当前为密码模式
     * @return List<GrantType>
     */
    private List<GrantType> grantTypes(){
        List<GrantType> grantTypes = new ArrayList<>();
        GrantType grantType = new ResourceOwnerPasswordCredentialsGrant("/blogs/oauth/token");
        grantTypes.add(grantType);
        return grantTypes;
    }

    /**
     * 设置 swagger2 认证的安全上下文
     * //.forPaths(PathSelectors.any()) 所有接口加锁
     * //.forPaths(Predicates.not(Predicates.in(ignoreUrlProperties.getUrls()))) 加锁排除指定的接口地址
     * ignoreUrlProperties为获取yml中配置的接口地址
     * @return SecurityContext
     */
    private SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(Collections.singletonList(new SecurityReference("oauth2", scopes())))
                .forPaths(Predicates.not(Predicates.in(ignoreUrlProperties.getUrls())))
                .build();
    }


    /**
     * 设置认证的作用域scope
     * @return AuthorizationScope[]
     */
    private AuthorizationScope[] scopes() {
        return new AuthorizationScope[]{
                new AuthorizationScope("all", "All scope is trusted!")
        };
    }


}

 

Spring Boot整合Spring Security实现JWT无状态认证实战指南 在微服务架构和前后端分离的现代Web开发中,认证与授权是保障系统安全的核心环节。传统的基于Session的认证方式在分布式场景下面临扩展性和跨域挑战,因此无状态认证方案应运而生。JWT(JSON Web Token)作为一种开放标准,通过将用户信息编码为JSON对象并签名,实现了安全、自包含的身份凭证传输。其技术价值在于彻底解耦了服务端会话状态,显著提升了系统的可扩展性和跨域支持能力,尤其适用于RESTful API和微服务间的安全通信。结合Spring Security这一强大的Java安全框架,开发者可 阅读详情

相关推荐

Spring Boot Swagger安全防护:三步实现API文档密码认证

在API开发领域,接口文档是前后端协作和系统集成的关键枢纽。Swagger(OpenAPI)作为行业标准工具,能自动生成交互式文档,极大提升开发效率。然而,其默认的公开访问特性在项目上线后可能带来严重的安全隐患,如接口信息泄露和未授权操作风险。基于API安全和权限最小化原则,为Swagger添加访问控制成为一项必要的工程实践。本文聚焦于通过应用层基础认证方案,利用Spring Security框架,以低侵入、高独立性的方式,为Swagger UI构建一道基础访问门禁。该方案通过配置安全过滤链、集成密码编码器

weixin_33895516的博客 488

渗透技巧基于Swagger-UI的XSS

swagger-ui是一个允许 API 交互和可视化的库,Swagger-UI有一个特性它允许您向 API 规范提供URL一个yaml或json文件,它将被获取并显示给用户。该漏洞产生的原因是swagger-ui使用了一个过时的库DomPurify(DOMPurify是一个开源的基于DOM的快速XSS净化工具。输入HTML元素,然后通过DOM解析递归元素节点,进行净化,输出安全的HTML。),结合库的特性允许获得由查询参数控制的DOM型XSS。

网安君的博客 1万+

Knife4j 4.4.0 整合 Spring Boot 3.0:5分钟完成 Swagger UI 界面与功能全面升级

本文详细介绍了如何将Knife4j 4.4.0与Spring Boot 3.0快速整合,实现Swagger UI界面与功能的全面升级。通过5分钟快速配置指南,开发者可以轻松掌握API文档生成、安全认证、分组管理等核心功能,提升微服务架构下的开发效率与协作质量。

weixin_34009794的博客 338

SwaggerUI用法和权限的注解

1.为什么使用swagger 2.怎么使用swagger 3.权限注解的使用方式

LXC的博客 2382

Spring Boot Swagger 404问题全解析:从原理到实战解决

在Java Web开发中,API文档是前后端协作和接口测试的关键。Swagger作为一套基于OpenAPI规范的API文档生成工具,通过自动扫描代码注解,能动态生成交互式文档界面,极大提升了开发效率。其核心原理在于,Spring Boot的自动配置机制会注册特定的资源处理器,将请求路径映射到jar包内的静态资源文件。然而,在实际工程实践中,开发者常因配置不当或环境冲突,导致Swagger UI页面无法访问,出现令人困惑的404错误。这通常涉及路径映射、静态资源处理、以及安全拦截等多个技术环节。尤其在微服务架

weixin_30861797的博客 355

JWT与Spring Security整合实战:从原理到安全陷阱全解析

身份认证与授权是现代Web应用,尤其是微服务架构中的核心安全机制。其原理在于通过可靠的凭证验证用户身份,并依据权限控制资源访问,是构建可信系统的技术基石。在众多技术方案中,JWT(JSON Web Token)因其无状态、自包含的特性,成为实现分布式认证的热门选择,而Spring Security则为Java应用提供了强大的安全框架支持。两者的结合能有效解决传统Session方案在扩展性和跨域场景下的痛点,技术价值在于简化架构、提升性能并支持灵活的权限模型。典型的应用场景包括前后端分离项目、微服务API网关

weixin_30883311的博客 364

企业级微服务接口文档安全:Spring Cloud OAuth2+Swagger UI登录认证完整指南

在企业级微服务架构中,接口文档的安全性至关重要。本文将详细介绍如何通过Spring Cloud OAuth2与Swagger UI实现完整的登录认证机制,保护API文档不被未授权访问,同时提供友好的开发者体验。 ## OAuth2认证核心配置解析 OAuth2认证体系的核心在于授权服务器和资源服务器的配置。在paascloud项目中,授权服务器配置集中在`PcAuthorizationServ

gitblog_00427的博客 505

poc-swagger:[POC]昂首阔步

poc-swagger 这是一个Java 8项目。 运行:mvn spring-boot:run 访问Swagger-UI界面:

一个应用两种安全:spring-addons如何在同一工程中优雅配置UI会话与REST API双过滤链

在真实的 Spring Boot 业务系统中,我们经常面临一个两难选择:既要为用户提供带登录页面的 Web UI,又要为前后端分离的前端提供纯 REST API。传统做法往往只能二选一,或者用大量 Java 代码手工堆砌两条安全配置。spring-addons 项目(Additional Spring Boot auto-configuration for OAuth2 / OpenID & RE

gitblog_00346的博客 704

swagger-ui-master.zip

swagger-ui:一个无依赖的HTML、JS和CSS集合,可以为Swagger兼容API动态生成优雅文档。也可去官网下载(https://swagger.io/tools/swagger-ui/)

cve-2023-23752扫描poc

joomla未授权访问cve-2023-23752扫描poc: Joomla是一套全球知名的内容管理系统(CMS),其使用PHP语言加上MySQL数据库所开发,可以在Linux、Windows、MacOSX等各种不同的平台上运行。 2月16日,Joomla官方发布安全公告,修复了Joomla! CMS中的一个未授权访问漏洞(CVE-2023-23752),目前该漏洞的细节及PoC/EXP已公开。 Joomla! CMS 版本4.0.0- 4.2.7中由于对web 服务端点访问限制不当,可能导致未授权访问Rest API,造成敏感信息泄露(如数据库账号密码等)。 受影响版本 4.0.0 <= Joomla <= 4.2.7 不受影响版本Joomla >= 4.2.8

springCloud微服务系列——OAuth2+JWT模式下的swagger+feign处理

    这次总结的内容为通过spring-security实现的OAuth2+JWT认证服务器和资源服务器分离架构下,如何引入swagger+feign。    需要解决的问题:    1、swagger-ui.html不需要权限验证    2、swagger引入request头的Authorization参数来提供令牌的输入    3、通过feign调用其他微服务时,被调用服务不再需要权限认证 ...

guduyishuai的博客 4968

STM32实战篇:使用USART发送/接收数据

在发送字符时也可以直接使用其对应的ASCLL码,例如: USART_SendData(USART1, 0x61);

qq_74114817的博客 596

springboot整合Swagger2 被拦截问题解决

springboot整合Swagger2 被拦截问题解决

qq_33472553的博客 6774

sqoop抽取mysql的数据到hive表里面,字段内容被自动截取,导致字段不全的问题解决

今天央视重新转播NBA,写篇博客纪念一下这个重要的日子,湖人的表现就呵呵了!!!! 强行转到博客的主题来 mysql的字段属性:该字段能存下的值比如:“山东” `province` varchar(3) NOT NULL COMMENT '省份' 用sqoop sqoop import --connect "jdbc:mysql://xxxxxx:3306/xxxxxx?tinyInt1isBit=false&zeroDateTimeBehavior=convertToNull..

放肆桀骜 963

SPSS与SPSS Modeler,不一样的世界

1. SPSS软件的前世今生 1.1 IBM SPSS的由来 与数据打过交道的小伙伴们,应该对SPSS软件都不陌生。SPSS是世界上最早的统计分析软件,由斯坦福大学的三个研究生大牛于1968年研发,同时还成立了SPSS公司。SPSS最初的全称是Solutions Statistical Package for the Social Sciences(社会科学统计软件包),随着SPSS产品服务领...

qq_24339451的博客 3613

【权限管理】使用spring security 实现默认登录,源码解析

【权限管理】使用spring security 实现默认登录,源码解析 其他文章可以通过菜单查看:【BookCase 菜单】 1、前言 在springboot 之前使用shiro实现权限管理的比较多,现在使用springboot 整合spring security 更方便。 2、实现 创建子项目 bookcase-auth 添加配置 <dependency> <groupId>com.github.xiaoymin</groupId> <artifac

燃尽余火的博客 2146

动态刷新曲线_【GhPython应用】利用反射刷新Image sampler组件

【版权声明】| 作者:月之眼|案例图片来源:Sergiu Radu Pop的facebook| 如有侵权,请联系大水牛平台|如果觉得文章不错,欢迎分享效果展示利用python刷新Image sampler组件,主要的思路就是X输入端:输入要切换的图片路径,我的案例中输入了9张图片。然后通过100毫秒切换一张图片显示,来达到动态显示效果。代码分析run输入端类型:bool (I...

weixin_42393829的博客 531

SpringBoot实战:整合Spring Security、JWT与Redis构建企业级认证系统

在现代Web应用开发中,用户认证与授权是保障系统安全的核心机制。其原理是通过验证用户身份并控制资源访问权限,确保数据安全与业务合规。JWT(JSON Web Token)作为一种无状态令牌技术,通过数字签名实现安全的身份凭证传递,有效解决了分布式系统中的会话管理难题。结合Redis高性能缓存,可以进一步提升系统响应速度并实现令牌黑名单等高级功能。这种技术组合在电商、社交、企业后台等需要严格权限控制的场景中具有广泛应用价值。本文以SpringBoot框架为基础,通过整合Spring Security、JWT和

weixin_30482383的博客 443

物理信息神经网络(PINN)文献综述 —— 原理、严格推导与优化训练策略

本章系统阐述物理信息神经网络的理论基础、主要算法改进与训练策略。内容涵盖:PINN 的数学表述与残差构造;损失与梯度的逐步推导;训练困难(梯度消失/爆炸、损失幅度不平衡、频谱偏差、采样效率低等)的定量分析;四类核心解决方案(动态损失加权、梯度归一化与预条件化、自适应采样、分阶段/分域训练)的详细推导与实现要点;以及若干关键算法的伪代码与收敛性形式结论。所有涉及推导的步骤均按顺序展开,给出必要的数学依据与结论性陈述,可直接作为教学或参考章节使用。

u012133341的博客 422

2024年下半年网络规划设计师论文真题

3、深入论述自身参与的工业网络是如何实施的,为实现制造业的智能化,如何实现数据的跨系统互通,促进各种工业数据的充分流动和无缝集成以及数据安全。3、结合自身参与的网络建设,详细叙述针对该网络“去NAT”的规划和设计方案。4、在实施过程中遇到的问题以及如何处理,项目实施后的效果和评价。2、大型园区网络“去NAT”改造和业务融合的整体架构。1、“网络去NAT”对推进ipv6演进和应用的意义。4、改造过程中遇到的问题及解决方案。2、简要叙述自身参与的制造网络建设。1、网络规划在智能制造中的意义。

鹿鸣天涯 2364

不用Swagger,那我用啥?

除了rel​和path​两个属性之外,@RestResource​中还有一个属性,exported​表示是否暴露接口,默认为true​,表示暴露接口,即方法可以在前端调用,如果仅仅只是想定义一个方法,不需要在前端调用这个方法,可以设置exported​属性为false。SpringDoc扮演的角色毕竟不是业务功能,而是项目的辅助功能,所以,我们可以将之从业务中剥离,放到Actuator中,毕竟Actuator专干这种事。...

JavaShark的博客 543

EMD-LSTM时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)

EMD-LSTM时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 654

单体、zuul、gateway集成swagger(亲测)

分三块介绍: 一、单体应用集成swagger 二、zuul网关集成swagger 三、gateway网关集成swagger集成spring security oauth2 标题单体应用集成swagger 一、pom添加坐标 <dependency> <groupId>com.spring4all</groupId> <artifactId&...

weixin_44125031的博客 778

2022年灌溉试验设计与数据分析考试试题

2.表2数据为表层0~10cm的原状土离心机土壤水分特征曲线试验数据,(1)请利用R语言nls函数通过Van Genuchten方程对土壤体积含水率和土壤基质势进行拟合;(3)指明土壤基值势为-33 kPa和-1500kPa时的体积含水率。1.请根据表1数据,以灌溉模式为主区,生物炭用量为子区,利用R语言agricolae包生成裂区试验设计试验处理布置图;3.以R工具包factoextra中decathlon2数据集前10列为数据进行PCA分析,要求计算出(1)前5个主成分的特征值、特征向量;

Mrrunsen的博客 265

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot项目访问swagger-ui.html添加登录页面

SpringBoot项目访问swagger-ui.html添加登录页面

liyh722的博客 180

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: IDEA翻译插件Translation 使用方法
下一篇: IDEA热部署-spring-boot项目
Copying505
博客等级 码龄9年 2粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值