详解Asp.Net Core管道模型中的五种过滤器的适用场景与用法

在这里插入图片描述

1. 前言

在 ASP.NET Core 中,过滤器是一种用于对请求管道进行前置或后置处理的组件。它们可以在请求处理的不同阶段干预和修改请求和响应,以实现一些通用的处理逻辑或功能增强。

ASP.NET Core 的管道模型由多个中间件组成,而过滤器是这个模型中的一部分。它们可以在中间件之前或之后执行,并且可以应用于整个应用程序、控制器、动作方法或特定的路由。过滤器可以用于多种场景,例如添加身份验证、授权、缓存、异常处理等。本文我将介绍 .NET Core 中常用的几种 过滤器。在这里插入图片描述

2. 工作原理

在这里插入图片描述
ASP.NET Core 的过滤器提供了一种灵活和可扩展的方式来实现通用的处理逻辑和功能增强。可以根据具体的需求自定义过滤器,并将它们应用到不同的组件上,以实现各种功能,如身份验证、授权、输入验证、结果缓存等。过滤器的执行顺序和中断逻辑可以根据配置进行调整,以满足特定的业务需求。

ASP.NET Core 的过滤器工作原理如下:

  1. 注册过滤器:您需要在应用程序中注册过滤器。可以通过特性(Attribute)或全局配置的方式将过滤器应用到控制器、动作方法或整个应用程序。

  2. 确定过滤器顺序:如果存在多个过滤器,它们将按照注册的顺序进行执行。您可以使用特性或全局配置来指定过滤器的顺序。

  3. 请求管道处理:当应用程序接收到请求时,请求管道开始处理。在过滤器被应用之前,中间件会处理一些通用的任务,如路由解析、身份验证等。

  4. 过滤器执行(前置和后置):过滤器分为前置过滤器(Before Filters)和后置过滤器(After Filters)两种类型。

    • 前置过滤器:前置过滤器在请求被处理之前执行,可以对请求进行修改或干预。例如,身份验证过滤器可以检查用户是否已经登录,授权过滤器可以验证用户是否有足够的权限访问资源。
    • 后置过滤器:后置过滤器在请求处理完成后执行,可以对响应进行修改或处理。例如,结果过滤器可以对响应进行缓存、日志记录或异常处理。
  5. 过滤器链:过滤器可以链接在一起形成一个过滤器链。在过滤器链中,每个过滤器都可以选择继续执行下一个过滤器或中断请求处理。

    • 对于前置过滤器,如果某个过滤器中断请求处理,则后续的过滤器将不会执行,并且请求将不会进入控制器的动作方法。
    • 对于后置过滤器,即使某个过滤器中断了请求处理,其他后置过滤器仍然会执行,并且响应会被传递回客户端。
  6. 结果处理:当请求通过过滤器链并且控制器的动作方法被执行后,结果将返回到过滤器链的后置过滤器。后置过滤器可以对结果进行修改或处理,然后将最终的响应返回给客户端。

  7. 请求管道结束:请求处理完成后,响应将发送回客户端,请求管道结束。
    在这里插入图片描述

3. 五种过滤器

在这里插入图片描述

1. Authorization Filter 授权过滤器

授权过滤器(Authorization Filter)是一种在请求处理管道中用于授权的组件。它可以用于保护整个控制器或单个操作方法,以确保只有已经通过认证和授权的用户才能够访问受保护的资源。授权过滤器通常用于验证用户是否具有访问资源的权限,并根据验证结果决定是否允许继续执行请求。

在 Asp.Net Core 中,授权过滤器可以通过实现 IAuthorizationFilter 接口来创建。该接口定义了一个 OnAuthorization 方法,该方法会在授权过程中被调用。在 OnAuthorization 方法中,可以编写自定义的授权逻辑,例如检查用户的角色、权限等信息,并根据验证结果决定是否允许继续执行请求。

适用场景

授权过滤器适用于需要对资源进行访问控制的场景。以下是一些适合使用授权过滤器的常见场景:

  • 身份验证和登录:授权过滤器可以用于验证用户是否已经通过身份验证,并且只有已登录的用户才能够访问受保护的资源。
  • 用户角色和权限管理:授权过滤器可以用于检查用户所属的角色或权限,以决定是否允许用户访问某些特定的功能或资源。
  • 访问级别控制:授权过滤器可以根据用户的访问级别(如管理员、普通用户等)来限制对某些敏感操作或敏感数据的访问。
  • API 接口访问控制:对于 Web API,授权过滤器可以用于验证调用 API 的客户端身份,并基于验证结果决定是否允许客户端访问 API 中的资源。
  • 多租户应用程序:对于分布式或多租户的应用程序,授权过滤器可以用于验证用户所属的租户,并根据租户的许可或设置限制用户对资源的访问。

需要注意的是,授权过滤器只是整个授权机制的一部分。它通常与身份验证机制(如 Cookie、JWT 等)和角色/权限管理系统配合使用,以实现完整的资源访问控制。

代码示例

下面是一个简单的授权过滤器示例代码:

using Microsoft.AspNetCore.Mvc.Filters;public class MyAuthorizationFilter : IAuthorizationFilter
{public void OnAuthorization(AuthorizationFilterContext context){// 在这里进行授权逻辑的处理if (!context.HttpContext.User.Identity.IsAuthenticated){// 如果未通过认证,则重定向到登录页面context.Result = new RedirectToActionResult("Login", "Account", null);}// 如果要进行更详细的授权验证,可以使用以下方式:/*if (!CheckUserPermissions(context.HttpContext.User)){// 如果未通过授权验证,则返回自定义的错误页面或错误信息context.Result = new ViewResult{ViewName = "Error",ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()){Model = "您没有访问该资源的权限"}};}*/}
}

在上述示例中,我们创建了一个名为 MyAuthorizationFilter 的授权过滤器,并实现了 IAuthorizationFilter 接口。在 OnAuthorization 方法中,我们首先检查用户是否已经通过认证。如果用户未通过认证,我们将其重定向到登录页面。如果想进行更详细的授权验证,可以编写自定义的验证逻辑,并根据验证结果决定是否允许继续执行请求。
要使用该授权过滤器,可以将其应用于整个控制器或单个操作方法。例如,在控制器类上使用 [TypeFilter(typeof(MyAuthorizationFilter))] 特性,或者在操作方法上使用 [ServiceFilter(typeof(MyAuthorizationFilter))] 特性。这样,每次请求进入被标记的控制器或操作方法时,都会触发授权过滤器的逻辑。

2. Action Filter 操作过滤器

操作过滤器(Action Filter)是 ASP.NET Core 中的一种过滤器类型,用于在控制器操作方法的执行前后,以及结果返回前后进行拦截和处理。操作过滤器提供了一种在请求处理管道中对操作方法进行预处理和后处理的机制,可以用于实现一些通用的功能,如日志记录、异常处理、性能计时等。

ASP.NET Core 提供了多个内置的操作过滤器接口,包括:

  • IActionFilter:定义了 BeforeAction 和 AfterAction 方法,用于在操作方法执行前后进行拦截和处理。
  • IResultFilter:定义了 BeforeResult 和 AfterResult 方法,用于在结果返回前后进行拦截和处理。
  • IAsyncActionFilter:与 IActionFilter 类似,但支持异步操作方法。
  • IAsyncResultFilter:与 IResultFilter 类似,但支持异步结果。
适用场景

操作过滤器适用于许多不同的场景,以下是几个常见的使用场景:

  • 认证和授权:操作过滤器可以用于进行身份验证和权限检查。通过在操作过滤器中实现适当的逻辑,您可以在操作方法执行之前拦截请求并验证用户的身份或权限。这样可以确保只有经过授权的用户才能访问受保护的操作。
  • 日志记录和审计:操作过滤器可以用于记录请求和响应的详细日志信息。通过在操作过滤器中添加日志记录逻辑,您可以在操作方法执行前后记录请求的相关信息,如请求路径、请求参数、执行时间等。这有助于对系统进行故障排查、性能优化和安全审计。
  • 异常处理:操作过滤器可以用于处理操作方法抛出的异常。通过在操作过滤器中捕获和处理异常,您可以选择性地修改操作结果或返回自定义的错误页面。这样可以改善用户体验,并提供更加友好的错误信息。
    缓存和性能优化:操作过滤器可以用于缓存操作结果以提高性能。通过在操作过滤器中检查缓存并根据缓存策略- 返回结果,可以避免重复执行相同的操作。这对于频繁访问的操作或需要长时间计算的操作特别有用。
  • 数据转换和格式化:操作过滤器可以用于对请求和响应数据进行转换和格式化。通过在操作过滤器中修改请求参数或对响应进行格式化,您可以将数据从一种格式转换为另一种格式,以满足特定的需求。
代码示例

可以根据需求选择合适的接口来实现操作过滤器。下面是一个简单的操作过滤器示例代码:

using Microsoft.AspNetCore.Mvc.Filters;
using System;public class MyActionFilter : IActionFilter
{public void OnActionExecuting(ActionExecutingContext context){// 在操作方法执行前进行拦截和处理Console.WriteLine("Before Action");// 如果需要检查某些条件,可以在此处进行判断/*if (!CheckAuthorization()){// 如果未通过授权验证,则可以中断操作方法的执行context.Result = new UnauthorizedResult();return;}*/}public void OnActionExecuted(ActionExecutedContext context){// 在操作方法执行后进行拦截和处理Console.WriteLine("After Action");// 可以在此处对操作结果进行修改或添加额外的处理逻辑/*if (context.Exception != null){// 如果操作方法抛出了异常,可以在此处进行异常处理context.Result = new ViewResult{ViewName = "Error",ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()){Model = context.Exception.Message}};context.ExceptionHandled = true;}*/}
}

在上述示例中,我们创建了一个名为 MyActionFilter 的操作过滤器,并实现了 IActionFilter 接口。在 OnActionExecuting 方法中,我们可以在操作方法执行之前进行一些拦截和处理的逻辑。例如,在这里可以进行身份验证、权限检查等操作。在 OnActionExecuted 方法中,我们可以在操作方法执行后进行一些拦截和处理的逻辑。例如,在这里可以对操作结果进行修改、异常处理等。

要使用该操作过滤器,可以在需要应用过滤器的控制器类或操作方法上使用 [ServiceFilter(typeof(MyActionFilter))] 特性。这样,每次请求进入被标记的控制器或操作方法时,都会触发操作过滤器的逻辑。

3. Result Filter 结果过滤器

结果过滤器(Result Filter)是 ASP.NET Core 中的一种过滤器类型,用于在控制器操作方法执行完毕后,对操作结果进行拦截和处理。结果过滤器提供了一种在请求处理管道中对操作结果进行预处理和后处理的机制,可以用于实现一些通用的功能,如日志记录、数据转换、缓存等。

ASP.NET Core 提供了多个内置的结果过滤器接口,包括:

  • IResultFilter:定义了 BeforeResult 和 AfterResult 方法,用于在结果返回前后进行拦截和处理。
  • IAsyncResultFilter:与 IResultFilter 类似,但支持异步结果。
适用场景

结果过滤器适用于许多不同的场景,以下是一些常见的使用场景:

  • 日志记录和审计:结果过滤器可以用于记录请求的操作结果和相关信息。通过在结果过滤器中添加日志记录逻辑,您可以在操作结果返回前后记录详细的日志信息,如请求路径、响应状态码、执行时间等。这有助于对系统进行故障排查、性能优化和安全审计。
  • 数据转换和格式化:结果过滤器可以用于对操作结果进行转换和格式化。通过在结果过滤器中修改操作结果或对其进行格式化,您可以将数据从一种格式转换为另一种格式,以满足特定的需求。例如,您可以将操作结果转换为 JSON 或 XML 格式,或者对结果进行加密或解密等处理。
  • 缓存和性能优化:结果过滤器可以用于缓存操作结果以提高性能。通过在结果过滤器中检查缓存并根据缓存策略返回结果,可以避免重复执行相同的操作。这对于频繁访问的操作或需要长时间计算的操作特别有用。
  • 统一错误处理:结果过滤器可以用于处理操作结果中的异常情况。通过在结果过滤器中捕获和处理异常,您可以选择性地修改操作结果或返回自定义的错误页面。这样可以改善用户体验,并提供更加友好和一致的错误信息。
  • 控制权限和访问控制:结果过滤器可以用于对操作结果进行权限验证和访问控制。通过在结果过滤器中检查用户的身份和权限,您可以决定是否允许访问操作结果,或者对结果进行相应的修改。这有助于实现细粒度的访问控制和安全性要求。
代码示例

可以根据需求选择合适的接口来实现结果过滤器。下面是一个简单的结果过滤器示例代码:

using Microsoft.AspNetCore.Mvc.Filters;
using System;public class MyResultFilter : IResultFilter
{public void OnResultExecuting(ResultExecutingContext context){// 在结果返回前进行拦截和处理Console.WriteLine("Before Result");// 可以在此处对操作结果进行修改或添加额外的处理逻辑/*if (context.Result is ViewResult viewResult){viewResult.ViewData["Message"] = "Hello, World!";}*/}public void OnResultExecuted(ResultExecutedContext context){// 在结果返回后进行拦截和处理Console.WriteLine("After Result");// 可以在此处对操作结果进行修改或添加额外的处理逻辑/*if (context.Exception != null){// 如果操作方法抛出了异常,可以在此处进行异常处理context.Result = new ViewResult{ViewName = "Error",ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()){Model = context.Exception.Message}};context.ExceptionHandled = true;}*/}
}

在上述示例中,我们创建了一个名为 MyResultFilter 的结果过滤器,并实现了 IResultFilter 接口。在 OnResultExecuting 方法中,我们可以在结果返回之前进行一些拦截和处理的逻辑。例如,在这里可以对结果进行修改、添加额外的数据等。在 OnResultExecuted 方法中,我们可以在结果返回之后进行一些拦截和处理的逻辑。例如,在这里可以对结果进行编辑、异常处理等。

要使用该结果过滤器,您可以在需要应用过滤器的控制器类或操作方法上使用 [ServiceFilter(typeof(MyResultFilter))] 特性。这样,每次请求进入被标记的控制器或操作方法时,都会触发结果过滤器的逻辑。

4. Exception Filter 异常过滤器

异常过滤器(Exception Filter)是 ASP.NET Core 中一种用于处理异常的过滤器类型。异常过滤器提供了一种在请求处理管道中对发生的异常进行拦截、处理和转换的机制,以便于统一错误处理和异常日志记录。

ASP.NET Core 提供了多个内置的异常过滤器接口,包括:

  • IExceptionFilter:定义了 OnException 方法,用于在发生异常时进行拦截和处理。
  • IAsyncExceptionFilter:与 IExceptionFilter 类似,但支持异步操作。
适用场景

异常过滤器适用于许多不同的场景,以下是一些常见的使用场景:

  • 统一错误处理:异常过滤器可以用于捕获和处理应用程序中发生的异常。通过在异常过滤器中定义统一的错误处理逻辑,您可以将异常转换为合适的错误响应,以提供更友好和一致的用户体验。例如,您可以返回自定义的错误页面或 JSON 格式的错误信息。
  • 异常日志记录:异常过滤器可以用于记录应用程序中发生的异常。通过在异常过滤器中添加日志记录逻辑,您可以将异常信息记录到日志文件或其他日志存储系统中,以便后续的故障排查和分析。这有助于快速定位和解决应用程序中的问题。
  • 异常转换和处理:异常过滤器可以用于对异常进行转换和处理。通过在异常过滤器中捕获异常并根据需求进行处理,您可以根据具体的业务逻辑将异常转换为不同的结果或执行特定的操作。例如,您可以将某些特定类型的异常转换为特定的错误代码或执行特定的补救操作。
  • 异常监视和报警:异常过滤器可以用于监视应用程序中的异常情况,并触发相应的报警机制。通过在异常过滤器中检测和统计异常出现的频率和数量,您可以及时获得应用程序的异常状态,并通知相关人员或系统进行处理。这有助于保证应用程序的稳定性和可靠性。
  • 异常处理优先级控制:异常过滤器可以用于控制异常处理的优先级和顺序。通过在异常过滤器中定义多个过滤器,并按照优先级顺序进行注册,您可以灵活地控制异常处理逻辑的执行顺序。这对于不同类型的异常需要不同的处理方式或特定的处理顺序时非常有用。
代码示例

以下是一个简单的异常过滤器示例代码:

using Microsoft.AspNetCore.Mvc.Filters;
using System;public class MyExceptionFilter : IExceptionFilter
{public void OnException(ExceptionContext context){// 在发生异常时进行拦截和处理// 可以在此处捕获并处理异常Exception exception = context.Exception;// 可以在此处修改返回结果或执行其他操作/*context.Result = new ViewResult{ViewName = "Error",ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()){Model = exception.Message}};*/// 可以在此处标记异常已处理,阻止其继续传播// context.ExceptionHandled = true;// 可以在此处记录异常日志// logger.LogError(exception, "An error occurred");}
}

在上述示例中,我们创建了一个名为 MyExceptionFilter 的异常过滤器,并实现了 IExceptionFilter 接口。在 OnException 方法中,我们可以捕获发生的异常,并对其进行处理。在方法中,您可以根据需求修改返回结果、标记异常已处理、记录异常日志等。

要使用该异常过滤器,您可以在需要应用过滤器的控制器类或操作方法上使用 [ServiceFilter(typeof(MyExceptionFilter))] 特性。这样,每次请求进入被标记的控制器或操作方法时,如果发生了异常,就会触发异常过滤器的逻辑。

5. Resource Filter 资源过滤器

资源过滤器(Resource Filter)是 ASP.NET Core 中一种用于在请求处理期间对资源进行前置或后置处理的过滤器类型。资源过滤器允许您在请求处理的不同阶段对资源进行拦截、修改或替换,以实现一些通用的处理逻辑或功能增强。

ASP.NET Core 提供了两个内置的资源过滤器接口:

  • IResourceFilter:定义了 BeforeResourceExecution 和 AfterResourceExecution 方法,分别在请求处理前和请求处理后被调用。
  • IAsyncResourceFilter:与 IResourceFilter 类似,但支持异步操作。
适用场景

资源过滤器在许多不同的场景中都非常有用,以下是一些常见的适用场景:

  • 认证和授权:资源过滤器可以用于实现认证和授权逻辑。通过在资源过滤器中进行身份验证和权限检查,您可以确保只有经过身份验证且具有足够权限的用户才能访问受保护的资源。这对于保护敏感信息和限制访问权限非常重要。
  • 输入验证和数据转换:资源过滤器可以用于验证和转换输入数据。通过在资源过滤器中对请求参数进行验证和处理,您可以确保输入数据的合法性和一致性。这有助于防止潜在的安全漏洞和数据不一致性问题。
  • 缓存和结果缓存:资源过滤器可以用于实现缓存和结果缓存逻辑。通过在资源过滤器中检查缓存并返回缓存的结果,您可以提高应用程序的性能和响应速度。对于一些计算密集型或重复性的操作,结果缓存是一种非常有效的优化策略。
  • 日志记录和跟踪:资源过滤器可以用于实现日志记录和跟踪功能。通过在资源过滤器中添加日志记录逻辑,您可以记录请求和响应的详细信息,以便后续的故障排查和分析。这有助于了解应用程序的行为和性能,并提供更好的运维支持。
  • 异常处理和错误处理:资源过滤器可以用于实现异常处理和错误处理逻辑。通过在资源过滤器中捕获和处理异常,您可以统一处理应用程序中发生的异常情况,并返回合适的错误响应。这有助于提供更友好和一致的用户体验。
  • 性能监控和统计:资源过滤器可以用于实现性能监控和统计功能。通过在资源过滤器中检测和统计请求的处理时间、资源使用情况等指标,您可以了解应用程序的性能状况,并采取相应的优化措施。这对于保证应用程序的稳定性和可靠性非常重要。
代码示例

以下是一个简单的资源过滤器示例代码:

using Microsoft.AspNetCore.Mvc.Filters;
using System;public class MyResourceFilter : IResourceFilter
{public void OnResourceExecuting(ResourceExecutingContext context){// 在请求处理前被调用// 可以在此处访问和修改请求资源,如路由数据、查询参数等/*string controller = context.RouteData.Values["controller"].ToString();string action = context.RouteData.Values["action"].ToString();string id = context.HttpContext.Request.Query["id"].ToString();*/// 可以在此处执行一些前置处理逻辑// 如权限验证、请求日志记录等}public void OnResourceExecuted(ResourceExecutedContext context){// 在请求处理后被调用// 可以在此处访问和修改响应结果,如状态码、内容等/*int statusCode = context.HttpContext.Response.StatusCode;string responseBody = context.HttpContext.Response.Body.ToString();*/// 可以在此处执行一些后置处理逻辑// 如响应结果日志记录、性能监控等}
}

在上述示例中,我们创建了一个名为 MyResourceFilter 的资源过滤器,并实现了 IResourceFilter 接口。在 OnResourceExecuting 方法中,我们可以访问和修改请求资源,例如路由数据、查询参数等,并执行一些前置处理逻辑。在 OnResourceExecuted 方法中,我们可以访问和修改响应结果,例如状态码、内容等,并执行一些后置处理逻辑。

要使用该资源过滤器,您可以在需要应用过滤器的控制器类或操作方法上使用 [ServiceFilter(typeof(MyResourceFilter))] 特性。这样,每次请求进入被标记的控制器或操作方法时,都会触发资源过滤器的逻辑。

4. 总结

在这里插入图片描述
以上是 .NET Core 中常用的几种 Filter,每种 Filter 都有其特定的作用和使用场景。可以根据自己的需求选择合适的 Filter 来增加请求处理管道的灵活性和可扩展性。

5. 参考文档

  • ASP.NET Core 中的筛选器 | Microsoft Learn
  • ASP.NET Core 中的管道机制 - hippieZhou - 博客园
  • ASP.NET CORE 管道模型及中间件使用解读 - Jlion - 博客园
  • ASP.NET Web API标准的管道式设计 - Artech - 博客园
  • 第十五节:Asp.Net Core中的各种过滤器(授权、资源、操作、结果、异常) - Yaopengfei - 博客园
    在这里插入图片描述

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

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

相关文章

kafka及异步通知文章上下架

1)自媒体文章上下架 需求分析 2)kafka概述 消息中间件对比 特 性 ActiveMQ RabbitMQ RocketMQ Kafka 开 发 语 言 java erlang java scala 单 机 吞 吐 量 万级 万级 10万级 100万级 时 效 性 ms us ms ms级以内 可 用 性 高(主从&#xff0…

如何从 Bak 文件中恢复 SQL数据库?(3种方法)

如何从 .bak 文件恢复 SQL数据库? 在数据库管理和维护过程中,数据的安全性和完整性至关重要。备份文件(.bak 文件)是 SQL Server 中常用的数据库备份格式,它包含了数据库的完整副本,用于在数据丢失、系统故…

4. 第一个3D案例—创建3D场景

入门Three.js的第一步,就是认识场景Scene、相机Camera、渲染器Renderer三个基本概念,接下来,咱们通过三小节课,大家演示“第一个3D案例”完成实现过程。 学习建议:只要你能把第一个3D案例搞明白,后面学习就…

SEO之网站结构优化(十四-内部链接及权重分配3)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、“新手上云”能够为你开启探索云世界的第一步 博客:阿幸SEO~探索搜索排名之道 7、锚文字分布及变化 前面…

部署 Web 项目到 Linux,可以使他人也访问项目的方法

目录 一、环境配置 二、建构项目并打包 三、上传Jar包到服务器, 并运行 3.1 上传Jar包 3.2 运行 jar 包 3.3 开放端口号 四、其他问题 4.1 运行异常问题 4.2 杀掉进程 五、总结 一、环境配置 如果本地项目是SpringBoot项目,使用的数据库是MySQL&#xff…

APP 数据抓取 - Charles 抓包工具的使用(Charles 端口配置、CA 证书配置、Charles Android 模拟器配置)

前言说明 此文章是我在学习 Charles APP 抓包时编写,内容都是亲测有效,文章内容也有参考其他人,参考文章如下: Android 手机使用 charles 抓 https 请求(保姆级教程)网易 mumu 模拟器安装下载 charles 的…

计算机网络(八股文)

这里写目录标题 计算机网络一、网络分层模型1. TCP/IP四层架构和OSI七层架构⭐️⭐️⭐️⭐️⭐️2. 为什么网络要分层?⭐️⭐️⭐️3. 各层都有那些协议?⭐️⭐️⭐️⭐️ 二、HTTP【重要】1. http状态码?⭐️⭐️⭐️2. 从输入URL到页面展示…

2024年9月3日嵌入式学习

数据结构 1定义 一组用来保存一种或者多种特定关系的数据的集合(组织和存储数据) 程序的设计:将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中, 并在此基础上实现某个特定的功能的操作&am…

「Python程序设计」条件控制:if-elif-else语句

我们在进行程序设计的过程中,基本上遵循的过程是,找出变量和常量,通过python编程语言,设置变量和常量,以及考虑是否需要赋予初始值。 设计变量和常量,其实就是为了模拟和计算我们的现实世界中,…

学习笔记--Docker

安装 1.卸载旧版 首先如果系统中已经存在旧的Docker,则先卸载: yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 2.配置Docker的yum库 首先要安…

IntelliJ IDEA 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 设置编辑器字体3. 设置编译软件整体字体 前言 IntelliJ IDEA 自定义字体大小,统一设置为 JetBrains Mono 具体操作 【File】>【Settings...】>【Editor】>【Font】 统一设置…

C++:list篇

前言: 观看C的list前需要对链表有一些了解,如C语言的链表结构。本片仅介绍list容器中常用的接口函数概念以及使用。 list的概念: 简而言之,C的list是一个双向带哨兵位的链表容器模板 list的构造: 1.list():默认构造 2.li…

认识git和git的基本使用,本地仓库,远程仓库和克隆远程仓库

本地仓库 #安装git https://git-scm.com/download/win #git是什么?有什么用? git相当于一个版本控制系统,版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 作用: 记录(项目&#…

物联网(IoT)支持的小型水处理厂实时硬件在环(HIL)仿真

这篇论文的标题是《Real-Time Hardware-In-The-Loop Simulation of IoT-Enabled Mini Water Treatment Plant》,作者是 Mohamad Taib Miskon 等人,发表在 2024 年 IEEE 自动控制与智能系统国际会议(I2CACIS)上。以下是该论文的主要…

【Agent】Agent Q: Advanced Reasoning and Learning for Autonomous AI Agents

1、问题背景 传统的训练Agent方法是在静态数据集上进行监督预训练,这种方式对于要求Agent能够自主的在动态环境中可进行复杂决策的能力存在不足。例如,要求Agent在web导航等动态设置中执行复杂决策。 现有的方式是用高质量数据进行微调来增强Agent在动…

vector 常见函数

目录 一.vector 构造函数 二 . Iterators 迭代器(random access iterator) 三.Capacity: 空间 3.1 resize 3.2 reserve 四.Element access: 元素访问 方式 4.1 operator[] 类似于数组的 [] 4.2 front 和back 五.Modifiers: 六.vector 的 二…

18、Gemini-Pentest-v2

难度 中 目标 root权限 一个flag 靶机启动环境为VMware kali 192.168.152.56 靶机 192.168.152.63 信息收集 web测试 访问80端口 上面介绍了一下这个系统是一个内部系统,让员工查看他们的个人资料还可以导出为PDF 页面还有一个链接是UserList可以访问但是页面什…

ES数据写入过程

1. 写入请求 当一个写入请求(如 Index、Update 或 Delete 请求)通过REST API发送到Elasticsearch时,通常包含一个文档的内容,以及该文档的索引和ID。 2. 请求路由 协调节点:首先,请求会到达一个协调节点…

微服务日常总结

1.当我们在开发中,需要连接多个库时,可以在yml中进行配置。 当在查询的时候,跨库时,需要通过DS 注解来指定,需要yml配置需要保持一致。 2. 当我们想把数据存入到clob类型中,需要再字段 的占位符后面加上j…

Zookeeper 官方示例2-SyncPrimitive 代码解读(二)

测试命令 java jar .\ZookeeperDemo-0.0.1-SNAPSHOT.jar bTest 192.168.206.100:2181 2 1. Barrier(阻塞原语) 1.1 概念 [!quote] A barrier is a primitive that enables a group of processes to synchronize the beginning and the end of a comput…