微服务架构下的‘黑带’安全大师:Spring Cloud Security全攻略!

news2024/11/26 6:54:15

深入探讨了微服务间的安全通信、安全策略设计以及面对经典安全问题的应对策略。无论你是微服务的新手还是资深开发者,都能在本文中找到提升安全功力的秘籍。让我们一起成为微服务架构下的‘黑带’安全大师!

文章目录

      • 1. 引言
        • 微服务安全挑战与重要性
        • Spring Cloud Security在微服务架构中的角色
      • 2. 背景介绍
        • 2.1 微服务安全背景
        • 2.2 Spring Security与Spring Cloud Security
      • 3. Spring Cloud Security基础
        • 3.1 环境搭建与配置
        • 3.2 认证机制
        • 3.3 授权管理
      • 4. 微服务间安全通信
        • 4.1 服务间鉴权
        • 4.2 SSL/TLS加密通信
      • 5. 安全策略与实践
        • 5.1 安全策略设计
        • 5.2 安全审计与日志
        • 5.3 安全测试与漏洞扫描
      • 6. 经典问题与解决方案
        • 6.1 跨域问题与CORS配置
        • 6.2 安全配置泄漏
        • 6.3 性能与安全性平衡
        • 6.4 安全漏洞管理
        • 6.5 微服务身份认证中的会话管理
      • 7. 结论
        • Spring Cloud Security对微服务安全的全面支持
        • 未来发展趋势与改进空间

1. 引言

在当今这个数字化飞速发展的时代,微服务架构如同一股不可阻挡的潮流,席卷了整个软件开发界。想象一下,你走进一家餐厅,点了一道菜,而这道菜由不同的厨师分别负责不同的部分,比如一位负责切菜,另一位负责烹饪,还有一位负责装盘。这就好比微服务架构,每个服务都是独立的,它们协同工作,共同完成一个复杂的任务。

但是,就像餐厅里的厨师们需要确保食材的安全和卫生一样,微服务架构中的安全问题也同样重要。这就是Spring Cloud Security闪亮登场的时刻了。

微服务安全挑战与重要性

想象一下,如果餐厅的食材被污染了,或者有人偷吃了别人的菜,那这家餐厅的声誉和顾客的信任就会受到严重损害。同样,如果微服务架构中的安全问题得不到妥善解决,那么整个系统的稳定性和用户的信任都会受到威胁。微服务架构的安全隐患包括但不限于服务间通信的安全性、数据泄露风险、身份认证和授权的复杂性等。

Spring Cloud Security在微服务架构中的角色

那么,Spring Cloud Security在这个“餐厅”里扮演的是什么角色呢?它就像是一位严格的食品安全监督员,确保每一项服务都符合安全标准,保护整个系统免受外部威胁。Spring Cloud Security通过提供一套全面的安全解决方案,帮助开发者构建安全的微服务架构,确保服务间的通信安全,以及数据的完整性和隐私。

在接下来的章节中,我们将深入探讨Spring Cloud Security的各个方面,从基础的环境搭建到复杂的安全通信,再到安全策略的设计和实施,我们将一起揭开Spring Cloud Security的神秘面纱,确保我们的微服务“餐厅”既美味又安全。

接下来,我们将继续深入探索这个主题,确保我们的“餐厅”能够提供既安全又美味的“菜肴”。

在这里插入图片描述

2. 背景介绍

2.1 微服务安全背景

在微服务的世界里,我们就像是在经营一家大型美食广场,每个摊位都是一个独立的服务,它们提供各种各样的美食,满足顾客不同的需求。但是,美食广场的热闹背后,隐藏着各种安全隐患。就像食物可能会变质,或者有人可能会偷吃,微服务架构也面临着数据泄露、服务间通信被截获等安全威胁。

微服务架构的安全隐患

  • 数据泄露:如果保护不当,敏感数据可能会被非法访问或泄露。
  • 服务间通信:服务之间的通信如果没有加密,就可能被监听或篡改。
  • 身份认证:如果身份认证机制不健全,恶意用户可能会冒充合法用户。
  • 权限管理:权限控制不当可能导致未授权访问。

安全需求概览

为了确保美食广场的安全运营,我们需要制定一系列的安全措施:

  • 确保所有食材(数据)的安全存储和传输。
  • 确保每个摊位(服务)之间的交易(通信)都是安全的。
  • 确保只有合法的厨师(用户)才能进入厨房(系统)。
  • 确保每个厨师只能接触他们被授权的食材。
2.2 Spring Security与Spring Cloud Security

在这个故事中,Spring Security就像是我们的主厨,它负责制定食品安全标准,而Spring Cloud Security则是那位食品安全监督员,它不仅遵循主厨的标准,还负责确保整个美食广场的食品安全。

Spring Security简介

Spring Security是一个功能强大且高度可定制的Java安全框架,它提供了全面的认证和授权支持。它就像是一位经验丰富的主厨,能够确保每道菜的制作都符合食品安全标准。

Spring Cloud Security特性与集成方式

而Spring Cloud Security则是在Spring Security的基础上,为微服务架构提供了额外的安全特性。它不仅能够保护单个服务,还能够在整个微服务架构中实现统一的安全策略。它就像是那位监督员,不仅监督单个摊位,还能够确保整个美食广场的食品安全。

  • 统一认证:确保所有服务都遵循统一的认证机制。
  • 动态权限控制:根据不同的服务和用户角色动态调整权限。
  • 服务间安全通信:通过OAuth2、JWT等技术确保服务间的通信安全。

通过Spring Cloud Security,我们的微服务美食广场不仅能够提供多样化的美食,还能够确保每一位顾客都能享受到安全、放心的用餐体验。


在这一章节中,我们通过一个生动的比喻,介绍了微服务架构的安全背景以及Spring Security和Spring Cloud Security的角色和特性。接下来,我们将深入探讨Spring Cloud Security的基础,包括环境搭建、配置以及认证和授权机制。

3. Spring Cloud Security基础

3.1 环境搭建与配置

想象一下,我们要在自家后院举办一场盛大的烧烤派对。在开始之前,我们需要准备烧烤架、食材、调料,还有最重要的——安全措施。在Spring Cloud Security的世界里,环境搭建和配置就像是准备烧烤派对的过程。

添加依赖与基本配置

首先,我们需要添加一些“调料”——也就是依赖。在Spring Cloud Security中,这意味着将相关的库和插件添加到我们的项目中。这可以通过Maven或Gradle来完成,就像去超市购买烧烤食材一样简单。

<!-- Maven依赖示例 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>

接下来,我们需要进行一些基本配置,比如设置安全策略和权限规则。这就像是调整烧烤架的高度,确保火候恰到好处。

与Spring Boot的集成

Spring Boot就像是我们的烧烤助手,它能够简化我们的配置过程。通过Spring Boot,我们可以快速启动Spring Cloud Security,就像一键启动烧烤派对一样方便。

// Spring Boot应用启动类
@SpringBootApplication
@EnableOAuth2Sso
public class烧烤派对Application {

    public static void main(String[] args) {
        SpringApplication.run(烧烤派对Application.class, args);
    }
}
3.2 认证机制

现在,我们的派对已经准备就绪,但是我们需要确保只有被邀请的客人才能参加。这就是认证机制的作用。

基于JWT的认证实现

JWT(Json Web Tokens)就像是派对的邀请函,每个客人都需要出示它才能进入。在Spring Cloud Security中,我们可以通过JWT来实现认证。

// JWT认证配置示例
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/api/public/**").permitAll() // 公共资源,任何人都可以访问
                .anyRequest().authenticated() // 其他资源需要认证
            .and()
            .oauth2ResourceServer() // 启用OAuth2资源服务器
                .jwt(); // 使用JWT进行认证
    }
}

OAuth2集成与认证流程

OAuth2则像是派对的VIP通道,它允许我们为特定的客人提供额外的权限。通过集成OAuth2,我们可以管理用户的访问令牌和刷新令牌,确保认证流程的安全性。

// OAuth2客户端配置示例
@Configuration
@EnableAuthorizationServer
public class OAuth2Config {

    // 配置略...
}
3.3 授权管理

当客人们进入派对后,我们需要确保他们只能访问他们被允许的区域。这就是授权管理的作用。

角色与权限设计

我们可以为不同的客人分配不同的角色和权限,比如厨师可以进入厨房,而普通客人只能在户外区域活动。

// 方法级权限控制示例
@PreAuthorize("hasRole('ROLE_CHEF')")
public void onlyChefsCanDoThis() {
    // 只有厨师能执行的操作
}

动态权限控制实现

动态权限控制就像是派对上的临时规则,比如如果天气变冷,我们可能会决定只有穿着外套的客人才能待在户外。

// 动态权限控制示例
@PreAuthorize("isAuthenticated() and hasPermission(#resource, 'read')")
public void accessResource(String resource) {
    // 根据资源和权限动态控制访问
}

通过这些基础的配置和机制,我们的烧烤派对(或者说微服务架构)就能够确保安全、有序地进行。在下一章节中,我们将探讨如何在微服务之间实现安全通信,就像确保派对上的每个对话都是私密的一样。
在这里插入图片描述

4. 微服务间安全通信

想象一下,我们的美食广场现在不仅仅是一个本地的热门地点,它已经扩展到了整个城市,甚至整个国家。每个摊位(服务)都分布在不同的地方,但它们需要频繁地交流和协作,就像不同餐厅之间的大厨们需要交换食谱和食材一样。这时候,确保这些交流的安全性就变得至关重要了。

4.1 服务间鉴权

使用Spring Cloud OAuth2 Server保护服务

现在,让我们把场景切换到一个大型音乐节。每个摊位(服务)都有自己的入口,只有持票(令牌)的人才能进入。Spring Cloud OAuth2 Server就像是音乐节的售票处,它负责发放这些“门票”,并确保只有合法的持票人能够进入。

// OAuth2服务端配置示例
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig {

    // 配置略...
    @Bean
    public AuthorizationServerEndpoints authorizationServerEndpoints() {
        return new AuthorizationServerEndpoints();
    }
}

客户端凭证模式与令牌传递

在音乐节中,除了普通观众,还有一些VIP嘉宾。他们持有特殊的凭证(客户端凭证),可以享受一些特别的待遇。在微服务架构中,客户端凭证模式允许特定的服务访问受保护的资源,而无需用户直接参与。

// 客户端凭证配置示例
@Configuration
public class ResourceServerConfig {

    @Bean
    public ResourceServerTokenServices tokenServices() {
        // 配置令牌服务
        return new ClientCredentialsTokenServices();
    }
}
4.2 SSL/TLS加密通信

现在,让我们回到美食广场。想象一下,如果所有的交流都通过一个开放的广播系统,那么任何人都可以听到这些交流内容,这显然是不安全的。因此,我们需要一个加密的通信渠道,就像一个安全的对讲机,只有授权的人才能听到对话内容。

微服务间的HTTPS配置

HTTPS就像是那个安全的对讲机,它通过SSL/TLS协议对数据进行加密,确保数据在传输过程中的安全性。在微服务架构中,配置HTTPS可以防止数据在服务间传输时被截获或篡改。

// HTTPS配置示例
@Configuration
public class HttpsConfig {

    @Bean
    public SecurityConfigurer<HttpSecurity, HttpServletRequest> securityConfigurer() {
        return new SecurityConfigurer<HttpSecurity, HttpServletRequest>() {
            @Override
            public void configure(HttpSecurity http) throws Exception {
                http.requiresChannel().anyRequest().requiresSecure();
            }
        };
    }
}

证书管理与信任链建立

在HTTPS的世界中,证书就像是身份证,它证明了服务的身份。证书管理就是确保每个服务都持有有效的身份证,并且这些身份证是由可信的机构(证书颁发机构)签发的。建立信任链就是确保所有服务都信任这些身份证的签发机构。

// SSL上下文配置示例
@Configuration
public class SslContextConfig {

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addAdditionalWebappClasses("org.apache.tomcat.websocket");
        factory.setSsl(new SslProperties());
        return factory;
    }
}

通过这些措施,我们的微服务美食广场就能够确保服务间的通信是安全的,就像确保每个摊位之间的交流都是私密且安全的一样。在下一章节中,我们将探讨如何设计安全策略,就像制定美食广场的运营规则一样,确保整个系统的安全和稳定。

5. 安全策略与实践

5.1 安全策略设计

想象一下,我们的微服务美食广场已经名声在外,吸引了众多食客。但是,随着人气的增加,一些不怀好意的人也试图混入其中。因此,我们需要设计一套安全策略,来保护我们的广场和顾客。

微服务边界安全控制

边界安全控制就像是广场的围栏和保安,它们确保只有合法的顾客可以进入。在微服务架构中,这意味着我们需要在服务的边界上设置防火墙、入侵检测系统等,来防止未授权的访问和潜在的攻击。

// 边界安全控制示例:防火墙规则
// 假设我们使用iptables作为防火墙
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -j DROP

数据保护与隐私策略

数据保护和隐私策略就像是广场的隐私政策,它们告诉顾客我们如何保护他们的个人信息。在微服务架构中,这意味着我们需要加密敏感数据,限制数据访问,并确保数据的完整性。

// 数据加密示例
@Encrypted
public class CustomerData {
    private String name;
    private String creditCardNumber;
    // getter和setter方法
}
5.2 安全审计与日志

随着广场的运营,我们需要记录下所有的活动,以便在出现问题时能够追踪和分析。这就是安全审计和日志的作用。

日志记录与分析

日志记录就像是广场的监控摄像头,它们记录下所有的活动。在微服务架构中,我们需要记录关键的操作,比如认证尝试、权限变更等,以便在需要时进行审查。

// 日志记录示例
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SecurityService {
    private static final Logger logger = LoggerFactory.getLogger(SecurityService.class);

    public void authenticate(String username, String password) {
        logger.info("Authentication attempt for user: {}", username);
        // 认证逻辑
    }
}

审计功能集成

审计功能则像是广场的安保团队,它们不仅记录活动,还分析这些活动,以发现潜在的安全问题。在微服务架构中,我们可以通过集成审计框架来实现这一点。

// 审计功能集成示例
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AuditConfig {
    // 配置略...
}
5.3 安全测试与漏洞扫描

为了确保广场的安全,我们需要定期进行安全检查,就像检查围栏是否牢固,监控是否正常工作一样。在微服务架构中,这意味着我们需要进行安全测试和漏洞扫描。

常见安全测试方法

安全测试就像是广场的安全演习,通过模拟攻击来检测系统的弱点。这包括渗透测试、代码审查等方法。

自动化安全扫描工具

自动化安全扫描工具则像是广场的自动报警系统,它们可以定期扫描系统,发现潜在的安全漏洞,并及时提醒我们。

// 自动化安全扫描工具使用示例(假设使用OWASP ZAP)
// 命令行启动ZAP进行扫描
zap-cli -d "http://example.com" -t "api" -r report.html

通过这些安全策略和实践,我们的微服务美食广场就能够在保持开放和欢迎的同时,也确保了安全和稳定。在下一章节中,我们将探讨一些经典问题及其解决方案,就像解决广场运营中遇到的常见问题一样。

6. 经典问题与解决方案

6.1 跨域问题与CORS配置

想象一下,我们的美食广场现在要举办一场盛大的国际美食节,邀请了来自世界各地的厨师。但是,他们来自不同的国家,使用不同的烹饪方法和食材,这就带来了一个问题——跨域。在网络世界中,这就像是不同源的网页尝试与我们的服务进行交互。

CORS概念与配置细节

CORS(跨源资源共享)就像是我们美食广场的国际通行证,它允许来自不同源的厨师(客户端)与我们的服务(服务器)进行交互。在Spring Cloud Security中,我们可以通过配置CORS来解决这个问题。

// CORS配置示例
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .cors() // 启用CORS
            .and()
            // 其他配置...
            ;
    }

    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("http://example.com")); // 允许的源
        configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE")); // 允许的方法
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}

复杂微服务架构下的跨域策略

在复杂的微服务架构中,跨域问题可能会更加棘手。这就像是在国际美食节中,不同摊位之间的交流也需要通行证。我们可以通过设置一个中心化的CORS配置,或者使用API网关来统一处理跨域请求。

在这里插入图片描述

6.2 安全配置泄漏

现在,让我们回到美食广场的日常运营。假设我们的安保团队不小心把监控摄像头的位置图泄露了出去,那么不怀好意的人就可以轻易地避开监控。在微服务架构中,这就像是泄露了敏感的安全配置。

避免敏感信息暴露

避免敏感信息暴露就像是确保我们的安保团队不会泄露监控摄像头的位置。在Spring Cloud Security中,我们可以通过环境变量、配置服务器或密钥管理工具来管理敏感信息。

安全配置最佳实践

安全配置的最佳实践就像是制定一套严格的安保协议,确保所有的安全配置都是安全的。

# 应用配置文件中避免硬编码敏感信息
# 使用环境变量或配置服务器引用
security.oauth2.client.client-secret=${CLIENT_SECRET}
6.3 性能与安全性平衡

在美食广场中,我们希望提供快速的服务,同时也要确保安全。这就像是在保证美食质量的同时,也要确保食物的卫生。

认证效率提升策略

提升认证效率就像是优化我们的点餐系统,让它既快速又安全。我们可以通过使用缓存、减少认证步骤或使用更高效的认证机制来实现这一点。

安全性与响应速度的权衡

在安全性与响应速度之间找到平衡就像是在保证食物美味的同时,也要确保食物的烹饪时间足够,以避免食物中毒。

6.4 安全漏洞管理

我们的微服务美食广场可能会面临各种安全漏洞,就像是广场上可能会有未被注意到的安全隐患。

常见微服务安全漏洞

常见的微服务安全漏洞包括未授权访问、注入攻击、服务拒绝攻击等。这就像是广场上可能会有未被注意到的破损围栏或不安全的电源插座。

漏洞修复与预防措施

漏洞修复与预防措施就像是定期的安全检查和维修,确保所有的安全隐患都被及时发现和修复。

6.5 微服务身份认证中的会话管理

在微服务架构中,会话管理就像是管理一个大型聚会的宾客名单,确保每个人都在正确的时间和地点。

无状态会话处理

无状态会话处理就像是使用电子票务系统,即使宾客分散在广场的各个角落,也能确保他们的身份得到验证。

分布式会话一致性问题

分布式会话一致性问题就像是确保所有入口的保安都能访问到最新的宾客名单。在微服务架构中,这可能需要使用分布式缓存或会话存储来实现。


通过这些解决方案,我们的微服务美食广场就能够在保持美味和热情的同时,也确保了安全和稳定。在下一章节中,我们将总结Spring Cloud Security对微服务安全的全面支持,并展望未来的发展趋势。

7. 结论

随着我们对微服务美食广场的探索之旅即将结束,就像一场精彩的美食节落下帷幕,我们不禁要思考:我们学到了什么?我们的广场有哪些亮点?未来又将如何发展?

Spring Cloud Security对微服务安全的全面支持

回顾我们的旅程,Spring Cloud Security就像是那位无所不在的超级大厨,他不仅精通各种烹饪技巧,还知道如何保护厨房免受火灾和盗窃的威胁。它为我们的微服务架构提供了全面的安全保护,从认证到授权,从服务间通信到数据保护,每一个环节都被精心设计,确保了整个系统的安全和稳定。

未来发展趋势与改进空间

展望未来,我们的微服务美食广场将继续扩大,吸引更多的食客和厨师。随着技术的发展和需求的变化,Spring Cloud Security也将继续进化,以应对新的安全挑战。

零信任安全模型

未来的美食广场可能会采用零信任安全模型,这意味着每个进入广场的人都需要经过严格的验证,无论他们是谁,无论他们来自哪里。在微服务架构中,这可能意味着更加细粒度的访问控制和更加动态的安全策略。

人工智能与机器学习

想象一下,如果我们的美食广场有一个智能助手,它能够预测安全威胁并自动采取措施。在微服务架构中,人工智能和机器学习可以帮助我们更好地识别异常行为,自动化安全响应,并提高整体的安全效率。

更广泛的生态系统整合

随着Spring Cloud Security的不断发展,它将与更多的技术和平台整合,比如云原生技术、容器化部署等,为我们的微服务美食广场提供更加强大和灵活的安全支持。

社区和开源的力量

最后,我们不能忽视社区和开源的力量。就像美食广场的繁荣离不开每一位顾客和厨师的贡献,Spring Cloud Security的成长也离不开广大开发者和安全专家的共同努力。通过社区的力量,我们可以不断发现新的问题,分享解决方案,共同推动微服务安全的进步。


随着夜幕降临,我们的微服务美食广场渐渐安静下来,但我们知道,明天又将是充满活力和创新的一天。感谢Spring Cloud Security这位超级大厨,让我们的美食广场不仅美味,而且安全。让我们一起期待,未来的微服务美食广场将如何继续为我们带来惊喜和美味。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【软件工程】【23.04】p1

关键字&#xff1a; 软件模型、提炼、加工表达工具、通信内聚、访问依赖、边界类交互分析、RUP核心工作流、首先测试数据流、软件验证过程、CMMI过程域分类工程类&#xff1b; 软件工程目的、功能需求是需求的主体、结构化方法、耦合、详细设计工具、类、类图、RUP采用用例技…

rk3568_mutex

文章目录 前言1、什么是mutex?1.1mutex互斥体API函数二、实验2.1实验目的2.2源码2.3结果图前言 本文记录的是rk3568开发板基础上做的mutex实验 1、什么是mutex? mutex是互斥体,它是比信号量semaphore更加专业的机制。 在我们编写Linux驱动的时候遇到需要互斥的地方建议使用…

Nginx企业级负载均衡:技术详解系列(12)—— 深入解析root、alias及location

你好&#xff0c;我是赵兴晨&#xff0c;97年文科程序员。 在生产服务器的Nginx配置中&#xff0c;我们总会遇到形形色色的配置方案。你是否曾注意到root和alias指令的巧妙应用&#xff1f;是否对那些五花八门的location匹配规则感到好奇&#xff1f; 今天&#xff0c;咱们来聊…

微服务架构-分支微服务设计模式

微服务架构-分支微服务设计模式 这种模式是聚合器模式的扩展&#xff0c;允许同时调用两个微服务链 分支微服务设计模式是一种用于构建大型系统的微服务架构模式&#xff0c;其核心思想是 将复杂的业务逻辑拆解为多个小的、相互独立的子系统&#xff0c;每个子系统由一个或多…

家政项目day2 需求分析(模拟入职后熟悉业务流程)

目录 1 项目主体介绍1.1 项目背景1.2 运营模式1.3 项目业务流程 2 运营端需求2.1 服务类型管理2.2 服务项目&#xff08;服务&#xff09;管理2.3 区域管理2.4 区域服务管理2.5 相关数据库表的管理2.6 设计工程结构2.7 测试接口&#xff08;接口断点查看业务代码&#xff09; 1…

SQL学习小记(三)

SQL学习小记&#xff08;三&#xff09; 功能实现思路代码部分名词解释 代码打包为可执行文件 功能说明&#xff1a;使用python代码&#xff0c;将数据库database1中的表格table1同步到数据库database2中 功能实现 思路 #mermaid-svg-R1pWrEWA799M299a {font-family:"tre…

Redis 中 List 数据结构详解

目录 List 用法 1. 增 2. 删 3. 查 内部编码 应用场景 前言 Redis 中的 List 和 Set 数据结构各有特点&#xff0c;适用于不同的应用场景。List 提供了有序的列表结构&#xff0c;适合用于消息队列和任务列表等场景&#xff1b;Set 提供了无序且不重复的集合结构&#…

【全开源】旅游系统源码(Uniapp+FastAdmin+ThinkPHP)

一款基于UniappFastAdminThinkPHP开发的旅游系统&#xff0c;包含消费者端&#xff08;手机端&#xff09;、机构工作人员&#xff08;手机端&#xff09;、机构端&#xff08;PC&#xff09;、平台管理端&#xff08;PC&#xff09;。机构可以发布旅游线路、景点项目&#xff…

Wpf 使用 Prism 实战开发Day27

首页汇总和数据动态显示 一.创建首页数据汇总数据接口 汇总&#xff1a;待办事项的总数已完成&#xff1a;待办事项里面有多少条完成的待办完成比例&#xff1a;已完成和汇总之间的比例备忘录&#xff1a;显示备忘录的总数待办事项&#xff1a;显示待办事项未完成的集合备忘录&…

Java实现对PDF、纵向、横向页面添加自定义水印功能

Java实现对PDF、纵向、横向页面添加自定义水印 效果图 -- 纵向 页面PDF使用到JAR Maven依赖版本效果图 -- 横向页面PDF 效果图 – 纵向 页面PDF 代码如下&#xff1a; 使用到JAR Maven依赖版本 <dependency><groupId>org.apache.pdfbox</groupId><artifa…

视频监控平台AS-V1000 的场景管理,一键查看多画面视频的场景配置、调用、管理(一键浏览多路视频)

目录 一、场景管理的定义 二、场景管理的功能和特点 1、功能 &#xff08;1&#xff09;场景配置 &#xff08;2&#xff09;实时监控 &#xff08;3&#xff09;权限管理 2、特点 三、AS-V1000的场景配置和调用 1、场景配置 &#xff08;1&#xff09;实时视频预览 …

【Linux】Linux的权限_2 + Linux环境基础开发工具_1

文章目录 三、权限3. Linux权限管理修改文件的拥有者和所属组 4. 文件的类型5. 权限掩码 四、Linux环境基础开发工具1. yumyum 工具的使用 未完待续 三、权限 3. Linux权限管理 修改文件的拥有者和所属组 在上一节我们讲到如何更改文件的访问权限&#xff0c;那我们需要更改…

在VS Code中进行Java的单元测试

在VS Code中可以使用 Test Runner for Java扩展进行Java的测试执行和调试。 Test Runner for Java的功能 Test Runner for Java 结合 Language Support for Java by Red Hat 和 Debugger for Java这两个插件提供如下功能&#xff1a; 运行测试&#xff1a; Test Runner for …

算法打卡 Day13(栈与队列)-滑动窗口最大值 + 前 K 个高频元素 + 总结

文章目录 Leetcode 239-滑动窗口最大值题目描述解题思路 Leetcode 347-前 K 个高频元素题目描述解题思路 栈与队列总结 Leetcode 239-滑动窗口最大值 题目描述 https://leetcode.cn/problems/sliding-window-maximum/description/ 解题思路 在本题中我们使用自定义的单调队列…

②单细胞学习-组间及样本细胞比例分析

目录 数据读入 每个样本各细胞比例 两个组间细胞比例 亚组间细胞比例差异分析&#xff08;循环&#xff09; 单个细胞类型亚新间比例差异 ①单细胞学习-数据读取、降维和分群-CSDN博客 比较各个样本间的各类细胞比例或者亚组之间的细胞比例差异 ①数据读入 #各样本细胞…

ios 端如何免费使用Emby???(利用Quantumult X )

本文转自博主的个人博客&#xff1a;https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接&#xff1a;点我访问 注意&#xff1a;使用此激活方式&#xff0c;有唯一缺点&#xff0c;在观看Emby时需保持Quantumult X为开启状态&#xff01; 一、安装证书 开启 MitM 后…

android11禁止进入屏保和自动休眠

应某些客户要求&#xff0c;关闭了开机进入屏保&#xff0c;一段时间会休眠的问题。以下diff可供参考&#xff1a; diff --git a/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/overlay/frameworks/base/packages/SettingsProvider/res/value…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(十六)- JUC(2)

目录 同步 两阶段终止模式 守护线程 线程状态 五种(操作系统角度) 六种(Java API角度) 烧水案例 共享模型之管程 临界区 竞态条件 同步 Slf4j(topic "c.TestJoin")public class TestJoin {static int r 0;static int r1 0;static int r2 0;​public sta…

微软为团队推出了 Copilot

微软希望使其生成式人工智能品牌对团队更有用&#xff0c;特别是跨公司和大型企业组织的团队。 在年度 Build 开发者大会上&#xff0c;微软宣布推出 Team Copilot&#xff0c;这是其 Copilot 系列生成式 AI 技术的最新扩展。 与微软之前的 Copilot 品牌产品不同&#xff0c;…

[IMX6ULL驱动开发]-Linux对中断的处理(二)

上一篇文章中&#xff0c;引入了Linux对于中断的一些简略流程以及中断抽象为具体实际形象。此文章主要是继续加深对Linux对中断的处理流程以及一些相应的数据结构。 目录 Linux对中断的扩展&#xff1a;硬件中断、软件中断 多中断处理 中断上下部处理流程 发生中断A&#…