一、项目结构目录
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表示忽略该参数,否则调用父类方法继续判断是否忽略该参数