【基于模型驱动的系统工程项目——OpenMBEE的模型管理系统——MMS 】example部分代码分析

本文详细介绍了如何在SpringBoot项目中使用Swagger3.0集成API文档,并配置了OpenAPI信息、安全策略和健康检查功能,包括HTTPBearerAuthentication和SpringSecurity的CORS设置。
摘要由CSDN通过智能技术生成

一、项目结构目录

Src:

   Main:

       Java:存放代码源文件

         Controllers:控制层:负责请求/响应的控制,会调用下面的Service层具体业务逻辑,最终返回装填好数据的页面或数据到前端

          Config:配置读取相关,比如RedisConfig.java

/src/main/resources:放置项目静态资源和配置文件

二、controllers

      1.ExampleApplication

Spring Boot应用程序的入口类

采用Swagger3.0(Open API 3.0)的方式集成到SpringBoot

导入了一些io.swagger.v3.oas.annotations包下的注解,用于配置OpenAPI文档信息和安全方案

@SpringBootApplication 注解:标识这是一个Spring Boot应用程序的入口类,Spring Boot会自动配置应用程序并扫描指定包下的组件

@OpenAPIDefinition全局只能定义一个,用于描述该服务的全局信息,主要配置文档信息和安全配置

info属性配置文档信息,比如标题,版本,描述等

security配置认证方式,name属性引入自定义的认证模式

license = @License设置联系人信息,授权名称、授权信息

如果想多个服务地址随时切换可以添加servers表示服务器地址或者URL模板列表

在这里设置了API的标题为"MMS Example API",版本为"0.0.1",描述为"MMS API的文档",以及许可证信息为Apache 2.0

@SecurityRequirement:注解定义了安全要求,指定了需要的安全方案名称,在这里指定了两个安全方案名称:"basicAuth"和"bearerToken"

@SecurityScheme注解就是自定义的认证模式,配置请求头携带Token

将 securitySchemes 添加到 OneAPI 规范的 components (组件)部分,@SecurityScheme 定义了 API 可以使用的安全机制。支持的安全机制有 APIKey、HTTP Authentication(Basic 和 Bearer)、OAuth2和OpenID Connect

在本例中,使用 HTTP Bearer Authentication 作为安全方案("bearerToken"安全方案,类型为HTTP),对于基于HTTP Bearer Token的认证,我们需要选择安全方案为 bearerAuth,bearer 格式为JWT;对于API级认证,则可以在API上使用@SecurityRequirement注解

效果: Swagger将此 Token 作为 HTTP Bearer 提供给 Authorization Header,最后,成功地调用了受保护的 deleteUser API

main():应用程序的入口方法,通过SpringApplication.run()启动Spring Boot应用程序

ExampleApplication配置了应用程序的OpenAPI文档信息和安全方案,确保API文档信息准确清晰,同时定义了安全方案以保护API的访问安全性

      2.HealthCheckController

网页运行健康状况检查,使用@Tag注解来定义Swagger文档中的标签名称为"Monitor"

在该类中定义了一个处理GET请求的方法healthcheck(),该方法映射到路径"/healthcheck",当收到该路径的GET请求时,该方法会返回字符串"healthy",表示服务健康状态良好。该控制器类主要用于提供健康检查功能,用于监控服务的运行状态

三、config

      1.ExampleSecurityConfig

Spring Security配置类,用于配置应用程序的安全性和跨域资源共享(CORS)设置,启用了 Web 安全、全局方法安全、事务管理和异步处理

安全框架,配置一个安全上下文,用于显示认证按钮  

@Configuration 开启判断用户对某个控制层的方法是否具有访问权限的功能

@EnableWebSecurity 启用Web安全功能,允许配置Web安全性

@EnableGlobalMethodSecurity(prePostEnabled = true) 启用全局方法级安全性,允许使用

@EnableTransactionManagement 启用事务管理功能

@EnableAsync 启用异步方法执行功能

@Value从配置文件中读取允许的跨域请求源,如果未配置则使用默认值"*"

@Autowired AuthSecurityConfig authSecurityConfig 自动注入AuthSecurityConfig类,用于配置认证安全性

自定义用户认证逻辑

configure(HttpSecurity http):配置HttpSecurity,禁用CSRF保护,并允许所有请求,使用HTTP基本认证,设置缓存控制头CacheControl避免浏览器缓存响应,并添在 ExceptionTranslationFilter 之后添加了 corsFilter过滤器

调用 authSecurityConfig.setAuthConfig(http) 进行进一步的身份验证配置

配置认证方式等(源自网络):

.csrf().disable() :认证失败处理类

     * anyRequest        |   匹配所有请求路径

     * access            |   SpringEl表达式结果为true时可以访问

     * anonymous        |   匿名可以访问

     * denyAll           |   用户不能访问

     * fullyAuthenticated  |   用户完全认证可以访问(非remember-me下自动登录)

     * hasAnyAuthority  |   如果有参数,参数表示权限,则其中任何一个权限可以访问

     * hasAnyRole      |   如果有参数,参数表示角色,则其中任何一个角色可以访问

     * hasAuthority     |   如果有参数,参数表示权限,则其权限可以访问

     * hasIpAddress     |   如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问

     * hasRole         |   如果有参数,参数表示角色,则其角色可以访问

     * permitAll        |   用户可以任意访问

     * rememberMe    |   允许通过remember-me登录的用户访问

     * authenticated    |   用户登录后可访问

useTrailingSlash():创建了一个自定义的RequestMappingHandlerMapping,开启了对路径末尾斜杠的处理,设置是否使用尾随斜杠匹配

authenticationManagerBean():配置AuthenticationManager Bean,用于处理身份验证

允许跨域的方法

addCorsMappings(CorsRegistry registry):配置CORS跨域请求映射,将 CORS 配置应用到所有请求路径,允许GET、POST、PUT、DELETE和OPTIONS方法

corsFilter() 方法定义了 CORS 过滤器配置,允许指定的源访问,并设置了允许的 HTTP 方法和请求头,设置最大缓存时间

configureContentNegotiation(ContentNegotiationConfigurer configurer):配置内容协商,设置不偏爱参数、不忽略接受头和默认内容类型为JSO

      2.OpenAPIConfig

Spring配置类,用于配置OpenAPI文档生成器的请求构建器,并忽略所有在控制器方法中注入的Map类型参数

@Configuration 标识这是一个配置类,Spring会在启动时加载并处理该类

@Bean 用于定义Spring Bean,方法返回的对象将被Spring容器管理

@Primary 用于指定当存在多个同类型的Bean时,优先使用被标注为@Primary的Bean

SpringDocRequestBuilder 类:自定义的请求构建器类,继承自RequestBuilder类,用于定制OpenAPI文档生成器的请求构建逻辑

myRequestBuilder() :创建并返回一个SpringDocRequestBuilder对象,构造方法中注入了参数GenericParameterBuilder、RequestBodyBuilder、OperationBuilder等,然后将这些参数传递给父类RequestBuilder的构造方法

SpringDocRequestBuilder 类的构造方法:接受了GenericParameterBuilder、RequestBodyBuilder、OperationBuilder等参数,并传递给父类RequestBuilder的构造方法

isParamToIgnore() :重写了父类RequestBuilder中的isParamToIgnore()方法,用于判断是否忽略某个方法参数

如果参数的类型是Map,则返回true表示忽略该参数,否则调用父类方法继续判断是否忽略该参数

  • 35
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值