webservice、WCF、webAPI、MVC权限认证

news2024/11/20 11:23:32

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);
                //创建一个Cookie
                HttpCookie 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: Account
        public 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.coloradmin.cn/o/1791470.html

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

相关文章

不是,有了这套IP地址管理开源系统谁还用Excel啊

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 中午好&#xff0c;我的网工朋友。 作为网工的我们想必都很清楚IP地址管理的重要性以及其复杂性&#xff0c;传统的Excel表格虽然在某些情况下能…

Nodejs-- 网络编程

网络编程 构建tcp服务 TCP tcp全名为传输控制协议。再osi模型中属于传输层协议。 tcp是面向连接的协议&#xff0c;在传输之前需要形成三次握手形成会话 只有会话形成了&#xff0c;服务端和客户端才能想发送数据&#xff0c;在创建会话的过程中&#xff0c;服务端和客户…

强化训练:day12(删除公共字符、两个链表的第一个公共结点、mari和shiny)

文章目录 前言1. 删除公共字符1.1 题目描述1.2 解题思路1.3 代码实现 2. 两个链表的第一个公共结点2.1 题目描述2.2 解题思路2.3 代码实现 3. mari和shiny3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 1. 删除公共字符   2. 两个链表的第一个公共结点   3. mari和shiny…

jenkins应用2-freestyle-job

1.jenkins应用 1.jenkins构建的流程 1.使用git参数化构建&#xff0c;用标签区分版本 2.git 拉取gitlab远程仓库代码 3.maven打包项目 4.sonarqube经行代码质量检测 5.自定义制作镜像发送到远程仓库harbor 6.在远程服务器上拉取代码启动容器 这个是构建的整个过程和步骤…

基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五)

上一篇&#xff1a;搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL&#xff08;四&#xff09; 下一篇&#xff1a;基于Django的博客系统之增加类别导航栏&#xff08;六&#xff09; 功能概述 添加搜索框用于搜索博客。 需求详细描述 1. 添加搜索框用于搜索博客 描…

Windows安装ElasticSearch版本7.17.0

在Windows系统上本地安装Elasticsearch的详细步骤如下&#xff1a; 1. 下载Elasticsearch 访问 Elasticsearch下载页面。选择适用于Windows的版本7.17.0&#xff0c;并下载ZIP文件。 2. 解压文件 下载完成后&#xff0c;找到ZIP文件&#xff08;例如 elasticsearch-7.17.0.…

Windows端口本地转发

参考 微软Netsh interface portproxy 命令 界面端口代理的 Netsh 命令 | Microsoft Learn 使用Windows系统的portproxy功能配置端口转发 使用Windows系统的portproxy功能配置端口转发-阿里云帮助中心 (aliyun.com) 将来自0.0.0.0地址对端口35623的访问转发到172.18.106.16…

Locality-aware subgraphs for inductive link prediction in knowledge graphs

Locality-aware subgraphs for inductive link prediction in knowledge graphs a b s t r a c t 最近的知识图&#xff08;KG&#xff09;归纳推理方法将链接预测问题转化为图分类任务。 他们首先根据目标实体的 k 跳邻域提取每个目标链接周围的子图&#xff0c;使用图神经网…

Docker最新超详细版教程通俗易懂

文章目录 一、Docker 概述1. Docker 为什么出现2. Docker 的历史3. Docker 能做什么 二、Docker 安装1. Docker 的基本组成2. 安装 Docker3. 阿里云镜像加速4. 回顾 hello-world 流程5. 底层原理 三、Docker 的常用命令1. 帮助命令2. 镜像命令dokcer imagesdocker searchdocker…

【云岚家政】-day00-开发环境配置

文章目录 1 开发工具版本2 IDEA环境配置2.1 编码配置2.2 自动导包设置2.3 提示忽略大小写2.4 设置 Java 编译级别 3 Maven环境3.1 安装Maven3.2 配置仓库3.3 IDEA中配置maven 4 配置虚拟机4.1 导入虚拟机4.2 问题 5 配置数据库环境5.1 启动mysql容器5.2 使用MySQL客户端连接数据…

GPT革命:AI如何重塑我们的未来!

GPT革命&#xff1a;AI如何重塑我们的未来&#xff01; &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享…

视创云展元宇宙虚拟展厅,带来沉浸式的逛展体验!

近年来&#xff0c;随着科技的飞速发展和市场需求的不断演变&#xff0c;众多企业纷纷将目光转向线上虚拟展厅的建设。视创云展元宇宙虚拟展厅凭借其创新性和实用性&#xff0c;为众多企业带来了前所未有的宣传体验&#xff0c;成为了商企展示自我、推广产品的全新舞台。 与传统…

K210视觉识别模块学习笔记4: 训练与使用自己的模型_识别字母

今日开始学习K210视觉识别模块: 模型训练与使用_识别字母 亚博智能的K210视觉识别模块...... 固件库: maixpy_v0.6.2_52_gb1a1c5c5d_minimum_with_ide_support.bin 文章提供测试代码讲解、完整代码贴出、测试效果图、测试工程下载 这里也算是正式开始进入到视觉识别的领域了…

DNF手游辅助职业推荐:魔道学者云手机辅助玩法攻略!

在DNF手游中&#xff0c;魔道学者是一个独特且强力的辅助职业&#xff0c;深受玩家喜爱。她不仅能提供强大的辅助效果&#xff0c;还拥有丰富的技能机制。本文将简要介绍魔道学者的辅助玩法&#xff0c;推荐适合的装备和技能搭配&#xff0c;帮助玩家更好地掌握这一职业。 魔道…

【Linux 网络编程】网络的背景、协议的分层知识!

文章目录 1. 计算机网络背景2. 认识 "协议"3. 协议分层 1. 计算机网络背景 网络互联: 多台计算机连接在一起, 完成数据共享; &#x1f34e;局域网&#xff08;LAN----Local Area Network&#xff09;: 计算机数量更多了, 通过交换机和路由器连接。 &#x1f34e; 广…

【Java数据结构】详解LinkedList与链表(二)

目录 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2.反转一个单链表 3. 找到链表的中间节点 4.输入一个链表&#xff0c;输出该链表中倒数第k个结点。 5.合并两个有序链表 6.链表分割 7. 判定链表的回文结构 8.输入两个链表&#xff0c;找…

【Centos7】解决 CentOS 7 中出现 “xx: command not found“ 错误的全面指南

【Centos7】初探xx:command not found解决方案 大家好 我是寸铁&#x1f44a; 【Centos7】解决 CentOS 7 中出现 “xx: command not found” 错误的全面指南✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 经常有小伙伴问我&#xff0c;xx:command not found怎么办&#xff1…

超实惠的GPU云服务器安利!!

自己一个人抱着老笔记本学深度学习&#xff0c;没有GPU是真的难受。Colab用过&#xff0c;GPU稍微用用就被剥夺了。华为云在培训的时候也用过&#xff0c;好贵。现在学到大模型&#xff0c;cuda10.1举步维艰。 失眠在网上冲浪&#xff0c;刷到了潞晨云&#xff0c;一块六就能用…

强烈安利10款手机App!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1.听书神器——昊昊听书 昊昊听书app是一款专门为用户提供有声读物的应用程序。它不仅提供了各种类型的有声书籍&#xff0c;还有各种知名的电…

2024年6月2日 (周日) 叶子游戏新闻

中医百科中药: 中医百科中药是一款非常强大的中药知识科普软件&#xff0c;该应用提供500多味中草药的文献资料&#xff0c;强大的搜索功能可根据功效、特点和关键词来快速查找中药&#xff0c;而且每味中药的图片、功效、主治、炮制方法等百科知识&#xff0c;可以很好的帮助你…