十九:Spring Boot 依赖(4)-- spring-boot-starter-security依赖详解

目录

1. Spring Security 简介

1.1 Spring Security 的作用与优势

1.2 spring-boot-starter-security 启动器简介

2. Spring Security 自动配置

2.1 核心依赖解析

2.1.1 Spring Boot 自动为应用配置默认的安全设置,关键功能包括:

2.1.2 创建 默认的 AuthenticationManager 和 SecurityFilterChain。

2.1.2.1 AuthenticationManage

2.1.2.2 SecurityFilterChain

2.2 自动配置的关键类和功能

2.2.1 SecurityAutoConfiguration 类:启用基本的安全功能,如 HTTP 基本认证和表单登录。

2.2.2 默认用户和密码:自动生成用户名 user 和随机密码,帮助开发者快速启动安全功能。

2.2.3 WebSecurityConfigurerAdapter:允许开发者自定义安全配置,如 URL 路径保护、表单登录等。

2.2.4 CSRF 和 CORS 配置:默认启用 CSRF 防护,支持跨域资源共享(CORS)。

3. Spring Security 配置

3.1 启用 Spring Security

3.1.1 @EnableWebSecurity 注解

3.1.2 继承 WebSecurityConfigurerAdapter

3.2 SecurityAutoConfiguration 解析

3.3 默认安全配置与自定义

4. 身份验证与授权

4.1 基于表单的身份验证 (Form Login)

4.2 HTTP Basic 认证

4.3 LDAP 或数据库集成

4.4 基于角色的授权

5. 跨站请求伪造 (CSRF) 与 跨域资源共享 (CORS)

5.1 CSRF 防护

5.2 CORS 配置

6. 自定义认证与授权

6.1 创建自定义 UserDetailsService

6.2 JWT 无状态认证

6.3 OAuth2 认证

7. 安全性最佳实践

7.1 密码加密与存储

7.2 安全的 HTTP Headers 配置

7.3 防止常见安全漏洞

8. 集成其他 Spring Security 功能

8.1 OAuth2 集成

8.2 Spring Session 集成

8.3 Spring Security 与 Actuator 结合


  • 1. Spring Security 简介

  • 1.1 Spring Security 的作用与优势

    • 作用:
      • 认证 (Authentication):验证用户身份,常见方式有用户名密码、Token、OAuth2 等。

      • 授权 (Authorization):确定已认证用户是否有权限访问特定资源。

      • 安全审计 (Audit):记录用户行为生成安全日志。

      • 会话管理 (Session Management):防止会话劫持等安全漏洞,确保会话安全。

      • 防止攻击:防止 CSRF、XSS、点击劫持等常见攻击。

      • 加密与解密:提供密码加密机制,如 bcrypt、PBKDF2。

    • 优势:
      • 可扩展性强:支持多种认证方式(如表单认证、JWT、OAuth2、LDAP 等),提供极大的灵活性。

      • 与 Spring 完美集成:作为 Spring 生态的一部分,能无缝协作。

      • 默认的安全配置:提供合理的默认配置,能确保基本安全性,同时支持定制化配置。

      • 自动化与开箱即用:Spring Boot 提供 spring-boot-starter-security 启动器,简化集成过程。

  • 1.2 spring-boot-starter-security 启动器简介

    • 自动配置安全功能(如 HTTP 基本认证、表单登录、CSRF 防护等)。

    • 简化配置,通过少量配置定制应用的安全行为。

    • 支持多种身份验证方式(如 HTTP 基本认证、表单认证、OAuth2、LDAP 等)。

    • 核心依赖
      • Spring Security、Spring Boot Auto Configuration、Spring Security Web 模块。

    • 引入方式
      • <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        
  • 2. Spring Security 自动配置

  • 2.1 核心依赖解析

    • 2.1.1 Spring Boot 自动为应用配置默认的安全设置,关键功能包括:

      • 启用 HTTP Basic 认证

        • 什么是HTTP Basic

          • HTTP Basic 认证(HTTP Basic Authentication)是一种最简单的 HTTP 协议认证方式,它通过在 HTTP 请求头部传递用户名和密码来进行用户身份验证。

          • 工作原理:

            • 客户端请求:当客户端(如浏览器或 API 客户端)访问一个受保护的资源时,服务器会返回一个 401 Unauthorized 响应,表示客户端需要提供认证信息。

            • 客户端提供凭证:客户端根据响应提示,向用户请求用户名和密码,并将其组合为一个字符串(格式:username:password),然后对这个字符串进行 Base64 编码

            • 发送认证信息:客户端将编码后的凭证添加到 HTTP 请求头部的 Authorization 字段中,格式为:

            • Authorization: Basic <base64-encoded-credentials>
              
          • 安全性:

            • 明文传输:HTTP Basic 认证将用户名和密码以明文形式(经过 Base64 编码)发送。Base64 编码并不提供加密保护,只是对数据进行编码。因此,HTTP Basic 认证 在未使用 HTTPS(加密的 HTTP)时是非常不安全的,因为凭证可以被中间人(Man-in-the-Middle)攻击窃取。

            • 建议:为了确保安全,HTTP Basic 认证必须通过 HTTPS 来传输,以防止敏感信息在网络传输中被截取。

          • 使用场景:

            • HTTP Basic 认证通常用于简单的场景或开发阶段,如:

            • 小型应用、个人项目或内部应用。

            • 需要快速实现认证的场景,但不适合大规模生产环境中的敏感信息传输。

          • 优缺点:

            优点

            • 简单易实现:客户端只需要提供用户名和密码,服务器验证即可。

            • 无需额外的配置或复杂的认证流程。

          • 缺点

            • 安全性差:如果没有使用 HTTPS,凭证容易被窃取。

            • 不适合复杂的认证和授权需求,如支持多因素认证、第三方认证(如 OAuth2)等。

            • 无法有效管理用户会话,适用于短期或简单的认证需求。

      • 启用 CSRF 防护

        • 什么是CSRF(一般前后端分离 会禁用这个吧)

          • CSRFCross-Site Request Forgery,跨站请求伪造)是一种网络攻击方式,攻击者通过诱使已认证的用户在不知情的情况下执行不希望的操作,借此在用户和服务器之间伪造请求,从而达到攻击目的。

          • CSRF 攻击的基本原理:

            • 受害者登录应用:用户在某个网站(例如银行、社交媒体等)登录并且获得了有效的身份验证信息(如登录状态、Session 等)。

            • 攻击者诱导用户发起请求:攻击者通过构建一个恶意网站或页面,诱使已经登录该应用的用户去访问这个恶意网站。这个网站包含了一个伪造的请求,通常通过表单、图片、AJAX 请求等方式自动发送。

            • 浏览器发送请求:由于受害者已经登录目标网站,且该网站基于 SessionCookie 进行身份验证,浏览器会自动带上用户的身份信息(如 Cookie 或 Session ID),将伪造的请求发送到目标网站。

            • 服务器处理请求:目标网站的服务器会认为这是一个合法的请求,因为它带有有效的身份信息(如用户的 Cookie)。因此,服务器会执行请求中的操作(如转账、修改密码、删除数据等),而受害者并不知情。

          • CSRF 攻击的条件:

            • 用户已登录并保持登录状态:攻击者通过利用用户的登录状态来伪造请求。

            • 受害者的浏览器会自动带上身份信息:例如,用户已登录的站点通过 Cookie 或 Session 来验证身份,浏览器会自动将这些信息带入请求中。

            • 攻击者无法获取服务器的认证信息:CSRF 利用的是目标网站的身份认证(如 Cookie 或 Session),而不是攻击者直接获取用户的认证信息。

    • 2.1.2 创建 默认的 AuthenticationManagerSecurityFilterChain

      • 在 Spring Security 中,AuthenticationManagerSecurityFilterChain 是两个核心的组件,分别负责身份验证和请求过滤。在 Spring Boot 中,通过自动配置和默认设置,这两个组件通常会由 Spring Security 自动创建和配置,但开发者也可以根据需求进行自定义配置。

      • 2.1.2.1 AuthenticationManage
        • AuthenticationManager 是Spring Security中负责处理认证(authentication)请求的组件,它的作用是验证用户的身份是否合法。Spring Security默认使用ProviderManager作为实现,它可以委托给多个AuthenticationProvider来处理认证过程。

          在Spring Security的配置中,我们通常会通过以下两种方式来创建AuthenticationManager

        • 默认配置: 如果没有特别的自定义需求,Spring Security会自动为你配置一个默认的AuthenticationManager

        • 自定义配置: 你可以自定义AuthenticationManager来满足更具体的需求。

      • 2.1.2.2 SecurityFilterChain
        • SecurityFilterChain 定义了Spring Security如何处理HTTP请求。它是一个过滤器链,用来对进入应用程序的HTTP请求进行安全检查。每个过滤器负责一个特定的安全任务,例如认证、授权、CSRF保护等。

          Spring Security提供了多个默认的过滤器,例如:

          • UsernamePasswordAuthenticationFilter:用于处理基于用户名和密码的认证请求。

          • BasicAuthenticationFilter:用于处理HTTP Basic认证。

          • ExceptionTranslationFilter:处理认证和授权异常。

          • FilterSecurityInterceptor:用来对HTTP请求进行授权判断。

  • 2.2 自动配置的关键类和功能

    • 2.2.1 SecurityAutoConfiguration 类:启用基本的安全功能,如 HTTP 基本认证和表单登录。

      • SecurityAutoConfiguration 是 Spring Boot 自动配置类之一,它是启用 Spring Security 功能的核心类。Spring Boot 会根据项目的依赖和配置来自动配置 Spring Security,具体包括以下功能:

      • 启用 HTTP 基本认证和表单登录: 默认情况下,Spring Boot 启用 HTTP 基本认证和表单登录,以帮助开发者快速启动应用的安全功能。无论你是否进行自定义配置,Spring Security 都会为你提供基本的身份验证机制。

      • 默认安全策略: 自动配置会启用一些常见的安全功能,如:

        • 默认启用身份验证过滤器链(包括表单登录、用户名密码认证等)。

        • 默认启用 HTTP Basic 认证(适用于无状态的 RESTful API)。

        • 自动生成一个默认的 AuthenticationManager,它允许开发者在需要时直接使用。

        • 默认启用一些默认的角色、用户和密码配置。

    • 2.2.2 默认用户和密码:自动生成用户名 user 和随机密码,帮助开发者快速启动安全功能。

      • 当你在 Spring Boot 项目中没有显式配置身份验证信息时,Spring Boot 自动配置会生成一个默认的用户和密码。这个默认用户具有以下特征:

      • 用户名: user

      • 密码: 随机生成(每次启动时都不同)

      • 例如,应用启动时控制台会输出如下信息,显示生成的默认密码:

      • Using default security password: 12345678
        

    • 2.2.3 WebSecurityConfigurerAdapter:允许开发者自定义安全配置,如 URL 路径保护、表单登录等。

      • WebSecurityConfigurerAdapter 是一个扩展类,用于自定义和定制 Spring Security 的配置。你可以继承 WebSecurityConfigurerAdapter 类来创建自定义的安全配置类,以便在默认的安全配置基础上进行扩展和修改。

        WebSecurityConfigurerAdapter 提供了以下常用的方法:

        • configure(HttpSecurity http):允许你配置 HTTP 请求的安全规则,例如 URL 路径的访问控制(哪些请求需要认证,哪些请求是公开的),启用或禁用表单登录、HTTP Basic 认证、CSRF 防护等。

        • configure(AuthenticationManagerBuilder auth):允许你配置身份验证管理器,配置不同的身份验证提供者(例如,基于内存的、JDBC 或 LDAP 等身份验证机制)。

    • 2.2.4 CSRF 和 CORS 配置:默认启用 CSRF 防护,支持跨域资源共享(CORS)。

      • CSRF
        • CSRF(Cross-Site Request Forgery)防护: 默认情况下,Spring Security 启用 CSRF 防护,它通过要求每个请求带上一个特殊的令牌(token)来防止跨站请求伪造攻击(CSRF)。这对于 Web 应用尤其重要,可以防止恶意网站伪造用户请求。除非你有明确的理由,否则应避免禁用 CSRF 防护。

          Spring Boot 自动配置会根据请求的类型(例如,POST 请求)自动为每个表单生成 CSRF token。如果你想禁用 CSRF(例如在开发 REST API 时),可以通过如下配置禁用 CSRF 防护:

        • @Override
          protected void configure(HttpSecurity http) throws Exception {
              http.csrf().disable(); // 禁用 CSRF 防护
          }
          
      • CORS

        • CORS(Cross-Origin Resource Sharing)支持: 默认情况下,Spring Security 会启用对跨域资源共享(CORS)的支持。CORS 是一种机制,允许浏览器在一个域上运行的 Web 应用请求另一个域的资源。如果你有前后端分离的应用(前端和后端分别部署在不同的域),你可能需要配置 CORS 规则。

        • @Override
          protected void configure(HttpSecurity http) throws Exception {
              http.cors().and()  // 启用 CORS
                  .authorizeRequests()
                  .anyRequest().authenticated();
          }
          
  • 3. Spring Security 配置

  • 3.1 启用 Spring Security

    • Spring Security 提供了一种方便的方式来保护你的应用程序。在 Spring Boot 中,启用 Spring Security 是通过 @EnableWebSecurity 注解来完成的。你还可以通过继承 WebSecurityConfigurerAdapter 类来定制安全配置。

    • @EnableWebSecurity
      @Configuration
      public class SecurityConfig extends WebSecurityConfigurerAdapter {
          @Override
          protected void configure(HttpSecurity http) throws Exception {
              http.formLogin().permitAll();
              http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated();
          }
      }
      

    • 3.1.1 @EnableWebSecurity 注解

      • @EnableWebSecurity 注解是 Spring Security 提供的,作用是启用 Web 安全功能,它会触发 Spring Security 的自动配置。

      • 通常与 @Configuration 注解一起使用,表明该类是 Spring 配置类并启用 Spring Security 配置。

    • 3.1.2 继承 WebSecurityConfigurerAdapter

      • WebSecurityConfigurerAdapter 是 Spring Security 提供的一个适配器类,它允许开发者定制 HTTP 请求安全配置。你只需要继承该类并重写其中的配置方法即可实现个性化的安全配置。

      • 代码

        • @Configuration
          @EnableWebSecurity
          public class SecurityConfig extends WebSecurityConfigurerAdapter {
          
              // 配置 HTTP 请求的安全规则
              @Override
              protected void configure(HttpSecurity http) throws Exception {
                  // 启用表单登录,允许所有用户访问登录页面
                  http.formLogin().permitAll();
          
                  // 设定哪些路径可以公开访问,其他路径都需要认证
                  http.authorizeRequests()
                      .antMatchers("/public/**").permitAll()  // 公开路径 /public/**
                      .anyRequest().authenticated();         // 其他请求需要认证
              }
          }
      • http.formLogin().permitAll();:启用表单登录,并允许所有用户访问登录页面。

      • http.authorizeRequests().antMatchers("/public/**").permitAll();:公开路径 /public/**,允许任何用户访问。

      • http.anyRequest().authenticated();:其他路径都需要身份验证。

      • http.csrf().disable(); // 禁用 CSRF 防护

      • http.httpBasic(); // 启用 HTTP Basic 认证

      • http.authorizeRequests()
            .antMatchers("/admin/**").hasRole("ADMIN")  // /admin/** 路径需要 ADMIN 角色
            .antMatchers("/user/**").hasRole("USER");  // /user/** 路径需要 USER 角色
  • 3.2 SecurityAutoConfiguration 解析

    • SecurityAutoConfiguration 是 Spring Boot 中的自动配置类,它帮助你快速启用和配置 Spring Security。如果你没有手动配置 Spring Security,Spring Boot 会自动应用该配置。

    • 这两个类通常是一起工作的,SecurityAutoConfiguration 提供了 Spring Boot 中的默认配置,而 WebSecurityConfigurerAdapter 则是用来 覆盖和自定义 默认配置的。如果你没有自定义安全配置,那么 SecurityAutoConfiguration 会为你提供默认的安全设置。如果你需要特定的安全需求(例如,禁用 CSRF、配置表单登录、使用 JWT 认证等),你可以继承 WebSecurityConfigurerAdapter 并根据你的需求进行配置。

    • 自动启用基于表单的登录、CSRF 防护等。

    • 自动配置默认的内存用户,用户名为 user,密码为随机生成。

    • 启用会话管理、跨域配置等。

    • 配置文件中的设置

      • 修改默认的用户名和密码:

        • spring.security.user.name=admin
          spring.security.user.password=secret
          
      • 禁用 CSRF 防护:

        • spring.security.csrf.enabled=false
          
  • 3.3 默认安全配置与自定义

    • 默认启用 HTTP 基本认证和表单登录。

      • ​​​​​​​Spring Boot 提供的自动配置(SecurityAutoConfiguration)会启用以下默认设置:

        • 默认身份验证方式: 启用内存用户存储,用户名 user 和随机密码。

        • 默认 HTTP 认证: 启用 HTTP Basic 和表单登录认证。

        • 默认的授权控制: 任何请求都需要认证。

        • CSRF 防护: 默认启用 CSRF 防护。

    • 自定义配置:

      • 当你需要更灵活的安全配置时,可以通过继承 WebSecurityConfigurerAdapter 来覆盖默认配置。常见的自定义配置包括:

        • 修改认证方式

          • ​​​​​​​​​​​​​​可以通过 AuthenticationManagerBuilder 配置不同的身份验证方式(如 JDBC、LDAP 或自定义 UserDetailsService)。

          • @Override
            protected void configure(AuthenticationManagerBuilder auth) throws Exception {
                auth.inMemoryAuthentication()
                    .withUser("admin").password(passwordEncoder().encode("password")).roles("ADMIN");
            }
        • 配置 URL 路径保护

          • 你可以定义哪些路径是公开的,哪些路径需要身份验证。

          • @Override
            protected void configure(HttpSecurity http) throws Exception {
                http.authorizeRequests()
                    .antMatchers("/admin/**").hasRole("ADMIN") // 只有 ADMIN 角色才能访问 /admin/**
                    .antMatchers("/public/**").permitAll()    // 公开路径可以直接访问
                    .anyRequest().authenticated();           // 其他路径需要认证
            }
            
        • 禁用默认的 CSRF 防护

          • @Override
            protected void configure(HttpSecurity http) throws Exception {
                http.csrf().disable(); // 禁用 CSRF 防护
            }
            
        • 自定义表单登录

          • @Override
            protected void configure(HttpSecurity http) throws Exception {
                http.formLogin()
                    .loginPage("/login")
                    .permitAll()
                    .defaultSuccessUrl("/home", true);
            }
            
        • 自定义用户认证

          • @Override
            protected void configure(AuthenticationManagerBuilder auth) throws Exception {
                auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
            }
            
  • 4. 身份验证与授权

    • 4.1 基于表单的身份验证 (Form Login)

      • Spring Security 默认启用表单登录。开发者可定制登录页面、登录成功和失败页面:
      • http.formLogin().loginPage("/custom-login").permitAll();
        
    • 4.2 HTTP Basic 认证

      • 启用 HTTP 基本认证,用于 RESTful API 等应用:
      • http.httpBasic().disable();  // 禁用 HTTP Basic 认证
        
      • 注意:HTTP Basic 认证的用户名和密码通过 HTTP 头部传输,因此需要使用 HTTPS 以确保安全。

    • 4.3 LDAP 或数据库集成

      • LDAP 集成:通过 LdapAuthenticationProvider 支持 LDAP 用户验证。

      • 数据库用户验证:实现 UserDetailsService 接口,从数据库加载用户信息。

    • 4.4 基于角色的授权

      • 通过 antMatchers 配置角色访问权限:
      • http.authorizeRequests().antMatchers("/admin/**").hasRole("ADMIN");
        
  • 5. 跨站请求伪造 (CSRF) 与 跨域资源共享 (CORS)

    • 5.1 CSRF 防护

      • Spring Security 默认启用 CSRF 防护,防止恶意用户伪造请求:
      • 启用 CSRF:http.csrf().enable();

      • 禁用 CSRF:http.csrf().disable();

    • 5.2 CORS 配置

      • 全局启用 CORS:http.cors().configurationSource(corsConfigurationSource());

      • 使用 @CrossOrigin 注解为特定接口启用 CORS。

  • 6. 自定义认证与授权

    • 6.1 创建自定义 UserDetailsService

      • 实现 UserDetailsService 接口来自定义用户认证逻辑,并结合 UserDetails 定义用户的角色与权限。
    • 6.2 JWT 无状态认证

      • 通过 JWT 实现无状态的认证流程:
      • 用户登录时,生成 JWT。

      • 客户端在请求时附带 JWT。

      • 服务器验证 JWT 后提取用户信息进行授权。

    • 6.3 OAuth2 认证

      • 支持 OAuth2 和 OpenID Connect,适用于第三方认证授权:
      • <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-client</artifactId>
        </dependency>
        
  • 7. 安全性最佳实践

    • 7.1 密码加密与存储

      • 使用 BCryptPasswordEncoder 加密存储密码,避免明文存储。

      • 密码验证时通过 PasswordEncoder 接口验证。

    • 7.2 安全的 HTTP Headers 配置

      • 启用安全 HTTP 头部,如 HSTS(HTTP Strict Transport Security)等,防止攻击:
      • http.headers().httpStrictTransportSecurity().maxAgeInSeconds(31536000).includeSubDomains(true);
        
    • 7.3 防止常见安全漏洞

      • XSS:清理用户输入,避免不信任的 JavaScript 代码。

      • SQL 注入:使用 ORM 框架,避免直接拼接 SQL 字符串。

      • CSRF:启用 CSRF 防护,生成并验证 CSRF 令牌。

  • 8. 集成其他 Spring Security 功能

    • 8.1 OAuth2 集成

      • 使用 spring-boot-starter-oauth2-client 实现 OAuth2 客户端功能。

      • 使用 spring-boot-starter-oauth2-resource-server 实现 OAuth2 资源服务器功能。

    • 8.2 Spring Session 集成

      • 通过 spring-session 管理会话,支持集群环境下的会话共享。
    • 8.3 Spring Security 与 Actuator 结合

      • 启用 Spring Boot Actuator 和 Spring Security,保护 Actuator 端点的安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/914487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建

Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建 &#xff08;1&#xff09;虚拟机 ubuntu 要使用桥接模式&#xff0c;不能使用其他模式 &#xff08;2&#xff09;通过网线将PC和开发板网口直连:这样的连接&#xff0c;开发板是无法连接外网的 &#xff08;3&#xff…

ReactPress:重塑内容管理的未来

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议&#xff0c;欢迎一起共建&#xff0c;感谢Star。 ReactPress&#xff1a;重塑内容管理的未来 在当今信息爆炸的时代&#xff0c;一个高效、易用的内容管理系统&#xff0…

WebRTC视频 01 - 视频采集整体架构

一、前言&#xff1a; 我们从1对1通信说起&#xff0c;假如有一天&#xff0c;你和你情敌使用X信进行1v1通信&#xff0c;想象一下画面是不是一个大画面中有一个小画面&#xff1f;这在布局中就叫做PIP&#xff08;picture in picture&#xff09;&#xff1b;这个随手一点&am…

SQL Servers审核提高数据库安全性

什么是SQL Server审核&#xff1f; SQL Server审核包括追踪和审查发生在SQL Server上的所有活动&#xff0c;检测潜在的威胁和漏洞&#xff0c;能够监控和记录对服务器设置的每次更改。此外&#xff0c;可以帮助管理员可以轻松地追踪数据库中特定表中的所有服务器活动&#xf…

STM32+AI语音识别智能家居系统

基于 STM32 和 AI 语音识别的智能家居系统的详细硬件和软件设计&#xff0c;包括各个模块的详细描述和代码示例。 一、硬件设计 1. 微控制器&#xff08;STM32&#xff09;&#xff1a; 选择 STM32F7 系列或更高性能的芯片&#xff0c;如 STM32F767ZIT6&#xff0c;以满足处理…

在 ASP.NET Core 6.0 中使用 Swagger/OpenAPI 丰富 Web API 文档

示例代码&#xff1a;https://download.csdn.net/download/hefeng_aspnet/89961435 介绍 在选择或尝试与 API 集成之前&#xff0c;大多数开发人员都会查看其 API 文档。保持 API 文档更新以反映软件更改是一项挑战&#xff0c;需要时间和精力。对于 Web API&#xff0c;我们…

萤石设备视频接入平台EasyCVR海康私有化视频平台监控硬盘和普通硬盘有何区别?

在现代安防监控领域&#xff0c;对于数据存储和视频处理的需求日益增长&#xff0c;特别是在需要长时间、高稳定性监控的环境中&#xff0c;选择合适的存储设备和监控系统显得尤为重要。本文将深入探讨监控硬盘与普通硬盘的区别&#xff0c;并详细介绍海康私有化视频平台EasyCV…

使用Matlab建立随机森林

综述 除了神经网络模型以外&#xff0c;树模型及基于树的集成学习模型是较为常用的效果较好的预测模型。我们以下构建一个随机森林模型。 随机森林是一种集成学习方法&#xff0c;通过构建多个决策树并结合其预测结果来提高模型的准确性和稳定性。在MATLAB中&#xff0c;可以…

WPS宏编辑器开发,单元格内容变更自动触发事件

WPS中Excel的“触发器” 写在前面宏的开发1、切换宏编辑器开发环境2、小练习&#xff1a;自定义函数3、完成功能需求&#xff1a;单元格内容变更自动触发事件 总结 写在前面 我先生用EXCEL做了一张学生存款表。设计得很简单&#xff0c;A学生已存款X元&#xff0c;A学生再次存…

HarmonyOS Next星河版笔记--界面开发(4)

布局 1.1.线性布局 线性布局通过线性容器column和row创建 column容器&#xff1a;子元素垂直方向排列row容器&#xff1a;子元素水平方向排列 1.1.1.排布主方向上的对齐方式&#xff08;主轴&#xff09; 属性&#xff1a;.justifyContent&#xff08;枚举FlexAlign&#…

【前端】深入浅出的React.js详解

React 是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开发并维护。随着 React 的不断演进&#xff0c;官方文档也在不断更新和完善。本文将详细解读最新的 React 官方文档&#xff0c;涵盖核心概念、新特性、最佳实践等内容&#xff0c;帮助开发者更好地理解…

Rust开发一个命令行工具(一,简单版持续更新)

依赖的包 cargo add clap --features derive clap命令行参数解析 项目目录 代码 main.rs mod utils;use clap::Parser; use utils::{editor::open_in_vscode,fs_tools::{file_exists, get_file, is_dir, list_dir, read_file}, }; /// 在文件中搜索模式并显示包含它的行。…

Xcode 16 使用 pod 命令报错解决方案

原文请点击这个跳转 一、问题现象&#xff1a; 有人会遇到 Xcode 升级到 16 后&#xff0c;新建应用然后使用 pod init 命令会报错如下&#xff1a; Stack Ruby : ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x86_64-darwin23]RubyGems : 3.5.22Host : macOS 15.0 (24A335…

Linux 6.13 将提供对一系列 Pre-M1 苹果设备的基本支持

虽然不像苹果 M3/M4 设备支持上游主线 Linux 内核那样令人兴奋&#xff0c;但对于那些拥有一些较旧的苹果&#xff08;M1 之前&#xff09;设备的用户来说&#xff0c;即将发布的 Linux 6.13 内核将支持一些较旧的 SoC 和板卡。 即将到来的 Linux 6.13 合并窗口将支持大量旧版…

【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数

CL13 最大的数(20 分) 输入一个有 n 个无重复元素的整数数组 a&#xff0c;输出数组中最大的数。提示&#xff1a;如使用排序库函数 sort()&#xff0c;需要包含头文件#include 。输入&#xff1a; 第一行是一个正整数 n(2<n<20)&#xff1b; 第二行包含 n 个不重复的整…

vue elementui el-dropdown-item设置@click无效的解决方案

如图&#xff0c;直接在el-dropdown-item上面设置click&#xff0c;相应的method并没有被触发&#xff0c;查找资料发现需要在它的上级 el-dropdown 处使用 command 方法触发。 【template】 <el-dropdown placement"bottom-end" command"handleCommand&quo…

flinkOnYarn并配置prometheus+grafana监控告警

flinkOnYarn并配置prometheusgrafana监控告警 一、相关服务版本&#xff1a; flink版本&#xff1a;1.17.2 pushgateway版本&#xff1a;1.10.0 prometheus版本&#xff1a;3.0.0 grafana-v11.3.0参考了网上的多个文档以及学习某硅谷的视频&#xff0c;总结了一下文档&#x…

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本 Shell脚本源码地址&#xff1a; Gitee&#xff1a;https://gitee.com/raymond9/shell Github&#xff1a;https://github.com/raymond999999/shell脚本可以去上面的Gitee或Github代码仓库拉取。 支持的功能和系统&am…

一文1800字使用Jmeter进行http接口性能测试!

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 为什么要做接口测试&#xff1f; 越底层发现b…

当使用key-value方式进行参数传递时,若key对应的是一个对象或数组结构,如何利用API Post工具进行模拟操作。

1. 后端服务代码如下 RequestMapping("/handle11")public Person handle11(Person person){System.out.println(person);return person;} 2. 后端入参结构 person是一个对象&#xff0c;对象结构如下&#xff1a; public class Person {private String username …