webservice、WCF、webAPI、MVC权限认证

webservice 权限认证

》》soapHeader

SOAPHeader案例

服务引用下生成的服务方法参数中会自动加入一个soapHeader的参数,
WEB服务引用则没有,我感觉采用WEB服务引用基于这种验证比较方便,
因为只需将soapHeader实例赋值一次就可以多次调用不同的服务方法。

在这里插入图片描述

Asp.NET 认证

在asp.net中,将身份验证分成了两个部分,第一个部分是IIS的身份验证,在用户访问网站时,IIS首先就会对用户进行身份验证,这个身份验证的具体设置在IIS中,这也非本文的重点,在此也不再详细介绍了。只有IIS通过了用户的身份验证之后,
才会进行第二个部分的身份验证,这个部分的身份验证则由asp.net来完成。

》》》asp.net 身份认证的流程
在asp.net中,身份验证过程分为两部分,一部分是IIS中的身份验证,只有通过了IIS中的身份验证之后,才行进行asp.net中的身份验证。一个完整的窗体身份验证流程如下所示:

首先,用户通过浏览器向服务器发送一个网页请求,假设用户要访问index.aspx网页, 那么浏览器就会将请求发送给IIS服务器。
假设在该服务器中将IIS设置成可以匿名访问,那么IIS服务器将会允许访问index.aspx网页。
IIS服务器允许访问之后,将会进入asp.net身份验证。asp.net会去web.config文件中查看节点下的节点中是否拒绝所有匿名用户。如果拒绝了所有匿名用户,服务器则会去查找一个身份验证的Cookie。
如果服务器查找不到该身份验证的Cookie,就会将网页跳转到登录页面。这个登录页面为节点中的loginUrl属性值,默认为网站根目录下的login.aspx。在跳转到到登录页面时,服务器会将当前访问的网页的地址,如index.aspx,作为ReturnUrl参数值附加到login.aspx的URL中。如下所示:
login.aspx?ReturnUrl=%2findex.aspx
用户在登录页面输入用户名和密码(或别的登录信息),并将这些信息提交到服务器。
服务器接收到用户提交的信息之后,判断用户是否为合法用户(判断方式有很多种,但这不是本文的重点),如果用户为合法用户,则创建一个包含窗体身份验证票的Cookie。
在创建完包含窗体身份验证票的Cookie之后,可以使用代码将网页跳回登录前访问的页面,如index.aspx网页(这个时侯ReturnUrl参数就起作用了)。
在登录后访问其它网页时(如跳转后的index.aspx页面),服务器会检测包含窗体身份验证的Cookie,并对用户进行身份验证。身

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

》》 window 集成认证

在IIS里取消匿名访问权限,若允许匿名访问,就没有必须提供验证凭证了

  R2RServiceSerialNumber sN = new R2RServiceSerialNumber();sN.Url = "http://172.xxxxx/R2RServiceSerialNumber.asmx";sN.Credentials = new NetworkCredential("用户名", "密码"); //用户名密码  SerialNumber SN = sN.GetSerialNumber("续保");strSerialNumber = SN.CurrentSerialNumber;
》》 表单认证 FORM认证
<forms name="name" loginUrl="URL" defaultUrl="URL"protection="[All|None|Encryption|Validation]"timeout="[MM]"path="path"requireSSL="[true|false]"slidingExpiration="[true|false]">enableCrossAppRedirects="[true|false]"cookieless="[UseUri|UseCookie|AutoDetect|UseDeviceProfile]" domain="domain name"ticketCompatibilityMode="[Framework20|Framework40]"><credentials>...</credentials></forms>
name:指定要用于身份验证的 HTTP Cookie。如果正在一台服务器上运行多个应用程序并且每个应用程序都需要唯一的 Cookie,则必须在每个应用程序的 Web.config 文件中配置 Cookie 名称。默认值为 ".ASPXAUTH"。
loginUrl:指定如果找不到任何有效的身份验证 Cookie,将请求重定向到的用于登录的 URL。默认值为 login.aspx。
defaultUrl:定义在身份验证之后用于重定向的默认 URL。默认值为 "default.aspx"。 如果登录页面的URL中没有ReturnUrl参数(也就是说,直接访问的登录页面)如果没有设置该属性,默认情况下为default.aspx页面。
protection:指定 Cookie 使用的加密类型(如果有)。默认值为 All。
timeout:指定 Cookie 过期前逝去的时间(以整数分钟为单位)。如果 SlidingExpiration 属性为 true,则 timeout 属性是滑动值,会在接收到上一个请求之后的指定时间(以分钟为单位)后过期。 为防止危及性能并避免向开启 Cookie 警告的用户发出多个浏览器警告,当指定的时间逝去大半时将更新 Cookie。这可能导致精确性受损。默认值为 "30"30 分钟)。 
path:为应用程序发出的 Cookie 指定路径。默认值是斜杠 ( /),这是因为大多数浏览器是区分大小写的,如果路径大小写不匹配,浏览器不会送回 Cookie。
requireSSL:指定是否需要 SSL 连接来传输身份验证 Cookie。默认值为 False。 
slidingExpiration:指定是否启用可调过期时间。可调过期将 Cookie 的当前身份验证时间重置为在单个会话期间收到每个请求时过期。默认值为 True。
enableCrossAppRedirects:表明是否将通过身份验证的用户重定向到其他 Web 应用程序中的 URL。默认值为 False。 
cookieless:定义是否使用 Cookie 以及 Cookie 的行为。默认值为 UseDeviceProfile.
domain:指定在传出 Forms 身份验证 Cookie 中设置的可选域。此设置的优先级高于 httpCookies 元素中使用的域。默认值为空字符串 ("")。
ticketCompatibilityMode:指定在 Forms 身份验证中对于票证到期日期使用协调世界时 (UTC) 还是本地时间。默认值为 Framework20。
**子元素**
credentials:允许选择在配置文件中定义名称和密码凭据。您还可以实现自定义的密码架构,以使用外部源(如数据库)来控制验证。

在这里插入图片描述
在这里插入图片描述
Clear 代表 密码是 明文

credentials 案例

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
》》》

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
》》FormsAuthentication.SetAuthCookie()方法创建身份验证票据的方法,事实上,这是一个使用缺省的身份验证票据的方法。在asp.net中,Forms身份验证的方式是在用户登录时创建一个身份验证票,然后将这个身份验证票存放在Cookie中,以后整个网站都可以通过这个Cookie来判断用户是否已经登录。如果用户浏览器不支持Cookie,
1。asp.net也可以将票证放在URL的查询字符串中进行传递,
2。放在header里

在这里插入图片描述
退出系统要
FormsAuthentication.SignOut();

FormsAuthentication.RedirectToLoginPage()”将网页跳转到登录页面。
在这里插入图片描述
FormsAuthenticationTicket()的
第一个参数为身份验证票的版本号,通常为1;
第二个参数为经过验证的用户名;
第三个参数为票证发出时的本地时间;
第四个参数为票证过期时的本地时间;
第五个参数为是否创建永久的Cookie;
第六个参数,也就是最重要的参数,为要传递的用户数据 【比如用户角色】。如果不需要传递用户数据,可以设为null。但本人建议使用空字符串,否则为票证加密时可能会产生意想不到的问题。

创建完身份验证票之后,可以使用FormsAuthentication类的Encrypt()方法为身份验证票加密,加密后返回一个字符串。然后创建一个Cookie,FormsAuthentication.FormsCookieName属性可以返回存放身份验证票的Cookie名,也就是web.config中<Forms>小节的name属性值。当然,在这里还可以设置一些Cookie相关的属性,如Cookie的path、expires、domain等,这此就不多介绍了。最后,将Cookie写入到客户端。

在这里插入图片描述
》》获取数据
string ss=System.Web.Security.FormsAuthentication.FormsCookiePath;
string s= System.Web.Security.FormsAuthentication.FormsCookieName; 在web.config中Forms
在这里插入图片描述

在这里插入图片描述
》》》asp.net 不同目录,不用角色

在这里插入图片描述
在这里插入图片描述

》》Global.asax

   protected void Application_AuthenticateRequest(object sender, EventArgs e){//判断正在请求页的用户的身份验证信息是否为空if (HttpContext.Current.User != null){//判断用户是否已经进行了身份验证if (HttpContext.Current.User.Identity.IsAuthenticated){//判断当前用户身份验证的方式是否为Forms身份验证方式if (HttpContext.Current.User.Identity is FormsIdentity){//获得进行了Forms身份验证的用户标识FormsIdentity UserIdent = (FormsIdentity)(HttpContext.Current.User.Identity);//从身份验证票中获得用户数据string UserData = UserIdent.Ticket.UserData;//分割用户数据得到用户角色数组string[] rolues = UserData.Split(',');//从用户标识和角色组初始化GenericPrincipal类HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(UserIdent, rolues);}}}}

在这里插入图片描述

//用户名string UserName = TextBox1.Text;//密码string UserPassword = TextBox2.Text;//用户角色string UserRole = "";//用户身份验证if ((UserName == "1" && UserPassword == "1") || (UserName == "2" && UserPassword == "2") ){//判断用户权限switch (UserName){case "1":UserRole = "Admin";break;case "2":UserRole = "backup";break;                  }//创建一个身份验证票FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "zen", DateTime.Now, DateTime.Now.AddMinutes(30), false, UserRole);//将身份验证票加密string EncrTicket = FormsAuthentication.Encrypt(ticket);//创建一个CookieHttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName, EncrTicket);//将Cookie写入客户端Response.Cookies.Add(myCookie);//跳转到初始请求页或默认页面Response.Redirect(FormsAuthentication.GetRedirectUrl("zen", false));}
Asp.net Window 认证

在这里插入图片描述
在这里插入图片描述
》》需要在IIS 中 开启Window是身份证验证,其它的关闭
在这里插入图片描述
asp.net 项目 web.config 配置
在这里插入图片描述
在这里插入图片描述

public partial class zen : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){var authenticationType = System.Web.HttpContext.Current.User.Identity.AuthenticationType;var domainUserName = System.Web.HttpContext.Current.User.Identity.Name;Response.Write("域账号:" + domainUserName + "<br/>");Response.Write("认证类型:" + authenticationType + "<br/>");var user = this.GetUserInfo(domainUserName);if (user != null){Response.Write("登录名:" + user.SAMAccountName + "<br/>");Response.Write("短名称:" + user.GivenName + "<br/>");Response.Write("名称:" + user.CN + "<br/>");Response.Write("邮件:" + user.Email + "<br/>");}}private UserInfo GetUserInfo(string domainUserName){try{if (string.IsNullOrEmpty(domainUserName)){return null;}var userArr = domainUserName.Split('\\');var domain = userArr[0];var loginName = userArr[1];var entry = new DirectoryEntry(string.Concat("LDAP://", domain));var search = new DirectorySearcher(entry);search.Filter = string.Format("(SAMAccountName={0})", loginName);search.PropertiesToLoad.Add("SAMAccountName");search.PropertiesToLoad.Add("givenName");search.PropertiesToLoad.Add("cn");search.PropertiesToLoad.Add("mail");var result = search.FindOne();if (result != null){var info = new UserInfo();info.SAMAccountName = result.Properties["SAMAccountName"][0].ToString();info.GivenName = result.Properties["givenName"][0].ToString();info.CN = result.Properties["cn"][0].ToString();info.Email = result.Properties["mail"][0].ToString();return info;}}catch{ }return null;}public sealed class UserInfo{public string SAMAccountName;public string GivenName;public string CN;public string Email;}}

在这里插入图片描述

MVC 权限认证

》》》Forms 表单认证
在这里插入图片描述
在这里插入图片描述
》》访问网页时,先请求AuthorizeCore这个方法,

 public class MyAuthorizeAttribute:AuthorizeAttribute{protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext){var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];var ticket = FormsAuthentication.Decrypt(cookie.Value);var roles = ticket.UserData;var inRoles = false;foreach (var role in roles.Split(',')){if (Roles.Contains(role)){inRoles = true;break;}}return inRoles;}}

在这里插入图片描述
》》 Home视图下面Index 访问需要Admin 角色才能访问
在这里插入图片描述

在这里插入图片描述

<form  method="post"><table><tr><td>用户名</td><td><input name="username" type="text" /></td></tr><tr><td>密码</td><td><input name="password" type="password" /></td></tr><tr><td colspan="2" ><input type="submit"  value="登录"/></td></tr></table>
</form>

在这里插入图片描述

MVC Forms 表单认证

在这里插入图片描述
在这里插入图片描述

public class AccountController : Controller{// GET: Accountpublic ActionResult Login(){string name = Request["username"];string password = Request["password"];if (name == "zen" && password == "123456"){FormsAuthentication.SetAuthCookie(name, false);              return Redirect(FormsAuthentication.GetRedirectUrl(name,false));}else{return View();}}}

在这里插入图片描述
》》》》 上面是MVC 默认的 AuthorizeAttribute

》》》 自定义ActionFilterAttribute

在这里插入图片描述

public class RequiresAuthenticationAttribute: ActionFilterAttribute{public string Role { get; set; }public override void OnActionExecuting(ActionExecutingContext filterContext){if (!string.IsNullOrEmpty(Role)){if (!filterContext.HttpContext.User.Identity.IsAuthenticated){string returnUrl = filterContext.HttpContext.Request.Url.AbsolutePath;string redirectUrl = string.Format("?ReturnUrl={0}", returnUrl);string loginUrl = FormsAuthentication.LoginUrl + redirectUrl;filterContext.HttpContext.Response.Redirect(loginUrl, true);}else{bool isAuthenticated = filterContext.HttpContext.User.IsInRole(Role);if (!isAuthenticated){throw new UnauthorizedAccessException("You have no right to view the page!");}}}else{throw new InvalidOperationException("No Role Specified!");}}}

在这里插入图片描述
在这里插入图片描述

  protected void Application_AuthenticateRequest(object sender, EventArgs e){//判断正在请求页的用户的身份验证信息是否为空if (HttpContext.Current.User != null){//判断用户是否已经进行了身份验证if (HttpContext.Current.User.Identity.IsAuthenticated){//判断当前用户身份验证的方式是否为Forms身份验证方式if (HttpContext.Current.User.Identity is FormsIdentity){//获得进行了Forms身份验证的用户标识FormsIdentity UserIdent = (FormsIdentity)(HttpContext.Current.User.Identity);//从身份验证票中获得用户数据string UserData = UserIdent.Ticket.UserData;//分割用户数据得到用户角色数组string[] rolues = UserData.Split(',');//从用户标识和角色组初始化GenericPrincipal类HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(UserIdent, rolues);}}}}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

webapi Http基本认证 Basic

在这里插入图片描述
客户端向服务端发送一个携带基于用户名/密码的认证凭证的请求。认证凭证的格式为“{UserName}:{Password}”,并采用Base64编码,经过编码的认证凭证被存放在请求报头Authorization中,Authorization报头值类似:Basic MTIzNDU2OjEyMzQ1Ng==。服务端接收到请求之后,从Authorization报头中提取凭证并对其进行解码,最后采用提取的用户名和密码实施认证。认证成功之后,该请求会得到正常的处理,并回复一个正常的响应。

注:其实basic 的参数传输方式还是一种不错的数据传输加密方式哦,多采用这种前后端数据交互方式的项目颇多,只是一般与https一起使用。更加安全

1、Convert.FromBase64String这句是解密经过BASE64加密的报文中的Authorization值,然后得到带格式的用户登录数据:{UserName}:{Password}
得到用户userid就可以自定义验证用户合法性了

2、HandleUnauthorizedRequest重写这个方法是为了服务器返回basic认证的格式,即前台弹出的那个登录框,
而BASE64加密及报文传输这不能算是basic认证特有,我们的表单数据传输都可以用这种方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
》》》录入正确的账号密码 就可以访问了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
那是https 是加密传输的。除此之外,内容在客户端和服务端都是明文显示的哦,大家要注意了
https 是最伟大的发明
在这里插入图片描述
在这里插入图片描述
》》》BasicAuthorizeAttribute

public class BasicAuthorizeAttribute: AuthorizeAttribute{protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext){if (actionContext.Request.Method == HttpMethod.Options) return true;if (actionContext.Request.Headers.Authorization != null && actionContext.Request.Headers.Authorization.Parameter != null){var authorizationParameter = Convert.FromBase64String(actionContext.Request.Headers.Authorization.Parameter);var basicArray = Encoding.Default.GetString(authorizationParameter).Split(':');var userid = basicArray[0];var password = basicArray[1];if (userid == "123456" && password == "123456"){return true;}}return false;}protected override void HandleUnauthorizedRequest(HttpActionContext actionContext){var responseMessage = new HttpResponseMessage(HttpStatusCode.Unauthorized);responseMessage.Headers.Add("WWW-Authenticate", "Basic");throw new HttpResponseException(responseMessage);}}

在这里插入图片描述

webapi 摘要认证

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

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

相关文章

IDC数据中心内容合规检测

摘要&#xff1a;电信数据中心通过实施AI数据质检方案&#xff0c;自动检测反馈预警&#xff0c;提升服务质量&#xff0c;保障网络合规&#xff0c;降低风险&#xff0c;增强企业竞争力。 1. 客户背景 该客户是国内领先的IDC云计算综合服务提供商&#xff0c;专注于为客户提供…

Vue3中的常见组件通信之v-model

Vue3中的常见组件通信之v-model 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $r…

.NET周刊【6月第1期 2024-06-02】

国内文章 一文带你了解.NET能做什么&#xff1f; https://www.cnblogs.com/Can-daydayup/p/18214473 .NET是一个免费、开源、跨平台的开发平台框架&#xff0c;广泛应用于桌面、Web、移动、云服务、游戏、物联网、大数据和人工智能等领域开发。它支持C#、Visual Basic、F#等…

Redis 单线程问题 BigKey问题

前言 简单的redis基础类型以及常用操作我们都也已经介绍过了 现在今天我们来谈谈redis对于单线程是需要怎么理解的 以及redis假设遇见大key我们需要怎么去查询和删除呢??? redis单线程 假设有个人现在问你一个问题:redis是单线程的还是多线程的 这个问题本身就不严谨 就像问…

I.MX6ULL 串口格式化函数移植实验

系列文章目录 I.MX6ULL高精度延时实验 I.MX6ULL高精度延时实验 系列文章目录一、前言二、串口格式化函数简介三、硬件原理分析四、实验程序编写五、编译下载验证 一、前言 上一节实验实现了 UART1 基本的数据收发功能&#xff0c;虽然可以用来调试程序&#xff0c;但是功能太单…

蒙层(css)

如何在 Vue 中实现一个包含图像和蒙层效果的组件&#xff1f;这个组件根据某个条件显示或隐藏蒙层&#xff0c;用于表示图像是否已读。 1. 创建基础模板 首先&#xff0c;我们在模板中使用 div 包裹我们的图像组件 GraphImage&#xff0c;并为最外层 div 设置 position: relat…

使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱

使用Hadoop MapReduce分析邮件日志提取 id、状态 和 目标邮箱 在大数据处理和分析的场景中&#xff0c;Hadoop MapReduce是一种常见且高效的工具。本文将展示如何使用Hadoop MapReduce来分析邮件日志&#xff0c;提取邮件的发送状态&#xff08;成功、失败或退回&#xff09;和…

Rethinking overlooked aspects in vision-language models

探讨多模态视觉语言模型的一些有趣结论欢迎关注 CVHub!https://mp.weixin.qq.com/s/zouNu-g-33_7JoX3Uscxtw1.Introduction 多模态模型架构上的变化不大,数据的差距比较大,输入分辨率和输入llm的视觉token大小是比较关键的,适配器,VIT和语言模型则不是那么关键。InternVL-…

Ubuntu 20.04 LTS配置JDK、Git

一、配置JDK 1.1 更新系统 执行以下命令 sudo apt update 出现以下界面即为安装成功 1.2 安装openjdk-11-jdk Ubuntu20.04中没有默认JDK&#xff0c;执行以下指令安装&#xff0c;默认会自动配置一些必要环境变量 sudo apt install openjdk-11-jdk 1.3 配置环境变量&…

每天五分钟深度学习PyTorch:Tensor张量的索引和切片

本文重点 有时候当我们拥有一个Tensor张量的时候,我们可能需要获取它某一维度的信息,那么此时我们就需要索引和切片的技术,它们可以帮助我们解决这些问题。 切片操作 a是四维的,然后默认是从第一维开始取,逗号表示取不同的维度 a[:2]表示第一维取0,1,后面三维取所有 …

场外个股期权交易最新指南

场外个股期权交易最新指南 场外个股期权作为一种灵活的衍生品工具&#xff0c;允许投资者在特定条件下对交易所指定的股票进行买卖。相较于标准化的场内个股期权&#xff0c;场外个股期权为投资者提供了更大的自由度。以下是关于场外个股期权交易的基本步骤和要点&#xff1a;…

通信技术振幅键控(ASK)调制与解调硬件实验

一、实验目的 1. 掌握用键控法产生ASK信号的方法&#xff1b; 2. 掌握ASK非相干解调的原理。 二、实验内容 1. 观察ASK已调信号的波形&#xff1b; 2. 观察ASK解调信号的波形。 三、实验器材 1. 双踪示波器&#xff1b; 2. 通信原理实验箱信号源模块、③、④、⑦号模块。…

全息之镜,未来的眼镜

全息之镜&#xff0c;作为未来眼镜的一种设想和展望&#xff0c;凭借其独特的全息技术&#xff0c;将在未来带来全新的视觉体验和应用场景。以下是关于全息之镜未来的详细分析和展望&#xff1a; 一、技术原理与特点 全息之镜利用全息技术&#xff0c;通过干涉、衍射和折射等…

【踏雪无痕的痕六】——数学中有意思的问题

一、背景介绍 提出一个问题往往比解决一个问题更有意义&#xff0c;因为提出一个问题相当于提出了一个思考问题的维度&#xff1b;而解决一个问题是沿着这个维度将已有的知识串起来的过程 三、过程 1.数人数你会吗&#xff1f; 小名再第10位&#xff0c;小李再第15位&#…

Linux下SpringBoot项目部署(centos系统)

一、首先找到自己的sql文件&#xff0c;没有就从数据库挪进来 二、在Maven下打包一下&#xff08;点击package&#xff09;&#xff0c;看到BUILD SUCCESS就是打包好了 三、将上面两个文件分别挪到 linux 中对应的文件&#xff0c;没有就创建一个&#xff08;我的是spring_blog…

【微机原理与汇编语言】并行接口8255实验

一、实验目的 掌握可编程并行接口芯片8255的工作原理及初始化方法掌握8255在实际应用中的硬件连接及编程应用 二、实验要求 根据实验室现有条件&#xff0c;针对实验任务&#xff0c;设计实验方案并进行实现。 三、实验内容 启动0#计数器&#xff0c;每计5个数&#xff08…

攻防世界—webbaby详解

1.ssrf注入漏洞 ssrf&#xff08;服务端请求伪造&#xff09;是一种安全漏洞&#xff0c;攻击者通过该漏洞向受害服务器发出伪造的请求&#xff0c;从而访问并获取服务器上的资源&#xff0c;常见的ssrf攻击场景包括访问内部网络的服务&#xff0c;执行本地文件系统命令&#…

Linux基础指令磁盘管理002

LVM&#xff08;Logical Volume Manager&#xff09;是Linux系统中一种灵活的磁盘管理和存储解决方案&#xff0c;它允许用户在物理卷&#xff08;Physical Volumes, PV&#xff09;上创建卷组&#xff08;Volume Groups, VG&#xff09;&#xff0c;然后在卷组上创建逻辑卷&am…

双指针: 盛水最多的容器

目录 描述 解法 盛水最多的容器_牛客题霸_牛客网 描述 给定一个数组height&#xff0c;长度为n&#xff0c;每个数代表坐标轴中的一个点的高度&#xff0c;height[i]是在第i点的高度&#xff0c;请问&#xff0c;从中选2个高度与x轴组成的容器最多能容纳多少水 1.你不…

【python】ModuleNotFoundError: No Module Named ‘openyxl’

成功解决“ModuleNotFoundError: No Module Named ‘openyxl’”错误的全面指南 在Python编程中&#xff0c;遇到ModuleNotFoundError: No Module Named openyxl这样的错误通常意味着Python解释器无法找到名为openyxl的模块。然而&#xff0c;这里存在一个常见的拼写错误&#…