通过前面的ASP.NET Core Blazor编程系列文章为读者介绍了Blazor及组件的相关基础概念,以及我们已经实现了用Blazor实现对数据的增删改查这四大基本功能,以及文件上传的功能,通过这些功能的实现我们已经能用Blazor处理一些简单的实际问题,特别是企业内部信息管理系统的相关问题。
前面的ASP.NET Core Blazor编程系列文章中却没有讲到信息管理系统中一个最基本功能——登录,有关登录功能的介绍
通过搜索引擎你可以搜索到很多关于如何基于Blazor开发登录页面的文章,不过大部分的Blazor登录示例是往往给出的是Identity Server的例子,包括微软自己的文档网站上的示例。
要实现web系统的登录功能,首先要考虑登录的认证方式,Web系统常见的登录机制有Cookie、Session或Token。对于Web 1.0时代的应用来说,最好用的就是Session;而对Web 2.0时代之后,随着一些前端技术比如Vue、Angular、React、Blazor的兴起,前后端分离技术的应用,单页应用开始出现在各种项目中,后端采用Restful架构设计Web API接口,这些接口都是无状态的,因此一般只选择Cookie或Token,由前端持有自己的身份票据,后端做验证而不存储。
微软官方最推荐的方式是使用OAuth和OIDC。如果开发企业内部信息管理系统的后台,还要另搞一个OAuth服务器,对绝大多数的企业内部IT开发者来说维护和部署成本过高。接下来我要介绍的登录功能,不使用OAuth服务器,而是使用传统的用户名与密码模式+后端生成JWT。对企业内部后台应用来说,这么做已经足够安全。
接下来介绍的登录功能是基于JWT的企业内部应用登录(用户名/密码)认证,本文中的代码只是示例代码,并不保证代码在安全性,逻辑层的可靠性。
1. 在Visual Studio 2022的解决方案资源管理器中,鼠标左键选中“Models”文件夹,右键单击,在弹出菜单中选择“添加—>类”,并将类命名为“UserInfo”, 这个新增实体类作为登录表单用的Model。如下图。并添加如下代码:
using System.ComponentModel.DataAnnotations; namespace BlazorAppDemo.Models { public class UserInfo { [Key] [Display(Name = "用户名")] [Required] [StringLength(30,MinimumLength =3)] public string UserName { get; set; } [Display(Name = "密码")] [Required] [DataType(DataType.Password)] [StringLength(30,MinimumLength =4)] public string Password { get; set; } public DateTime LastLoginTime { get; set; } public DateTime ChangedPasswordTime { get; set; } } }
1.在Visual Studio 2022的解决方案资源管理器中找到BookContext (Models/BookContext.cs) 文件,使用鼠标左键双击在文本编辑器中打开,添加UserInfo表的相关代码。代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace BlazorAppDemo.Models { public class BookContext:DbContext { public BookContext(DbContextOptions<BookContext> options) : base(options) { } public DbSet<Book> Book { get; set; } public DbSet<FileDescribe> FileDescribe { get; set; } public DbSet<UserInfo> UserInfo { get; set; } } }
2.在Visual Studio 2022中打开程序包管理器控制台 (PMC),“菜单栏>工具> NuGet 包管理器 > 程序包管理器控制台”。
3.在 PMC 中分别执行以下两条命令。这两条命令将实现向数据库中添加 UserInfo表,执行结果发下图。
Add-Migration AddUserInfoTable
Update-Database
4.在执行以上指令之后,会在数据库中添加UserInfo表,结果如下图。
本文讲解web服务器Tomcat,关于Web的相关概念,可以回顾以前的文章。1、Web服务器软件概述服务器,就是安装了服务器软件的计算机;服务器软件,就是可以接收用户的请求,处理请求,做出响应的软件;Web服务器软件,可以部署web项目,让用户通过浏览器来访问这些项目,也常被称为web容器。常见的java相关的web服务器软件:weblogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,是收费的。 JavaEE:是Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范。webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,是收费的。JBOSS:JBOSS公司,大型的JavaEE服务器,支持所有的JavaEE规范,是收费的。Tomcat:Apache基金组织,中小型的JavaEE服务器,仅支持少量的JavaEE规范(如servlet/jsp),开源免费,市面上很多中小型项目都在使用。2、Tomcat基本操作1)下载Tomcat:https://tomcat.apache.org/download-80
IIS有一种机制,默认会在IIS空闲一定时间段后,将应用程序池进行回收,这个时间段在IIS6中默认是20分钟,在IIS7中默认是1740分钟。两个配置都不合理,都会导致当应用程序池被回收后,第一次访问网站的时候速度很慢。如果一直不回收应用程序池,会导致占用内存过大。做SharePoint的人都知道,站点每天访问第一次登录的人都很慢。也是这个IIS回收机制的问题。 我们的希望是每天凌晨进行应用程序池回收,并同时进行第一次访问,这样每天工作时间访问的时候速度都是很快的。 具体做法是: 1.在IIS中配置,应用程序池的回收时间,固定为每天都0:00:00进行; 2.在Windows中制作一个计划任务,执行一个"activateWebSite.bat"批处理命令,固定为每天的03:00:00进行; "activateWebSite.bat"批处理命令的内容如下:@echooff @echo 正在关掉所有的IE进程(需要设置默认浏览器是IE) taskkill /imiexplore.exe/f/t @echo正在访问http://localh
考核内容:Map结构键名的值类型题发散度:★★★试题难度:★★★解题思路:ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。constm=newMap();consto={p:'HelloWorld'}; m.set(o,'content')m.get(o)//"content"复制Map的键是一个简单类型的值(数字、字符串、布尔值),则只要两个值严格相等,Map将其视为一个键,比如0和-0就是一个键,布尔值true和字符串true则是两个不同的键。另外,undefined和null也是两个不同的键。虽然NaN不严格相等于自身,但Map将其视为同一个键。所以键名值可以为undefined参考代码:答案:D、键名值不可以为undefined复制
FlutterInteract除了带来各种新的开发工具之外,最大的亮点莫过于1.12稳定版本的发布。不同于之前的版本,1.12.x版本对FlutterFramework做了较多的不兼容性升级,例如在Dart层:ImageProvider的load增加了DecoderCallback参数、TextField'sminimumheight从40调整到了48、PageView开始使用SliverLayoutBuilder而弃用RenderSliverFillViewport等相关的不兼容升级。但是上述的问题都不致命,因为只需要调整相关的Dart代码便可以直接解决问题,而此次涉及最大的调整,应该是Android插件的改进AndroidpluginsAPIs的相关变化,该调整需要用户重新调整Flutter项目中Android模块和插件的代码进行适配。一、AndroidPlugins1、介绍在Flutter1.12开始Flutter团队调整了Android插件的实现代码,在1.12之后Android开始使用新的插件API,基于的旧的PluginRegistry.Registrar不会立即
TIOBE近日宣布:Python成为2018年度编程语言,Python之所以获得这个称号,是因为它在2018年的排名中比其他所有语言都高。Python语言赢得了3.62%的选票,紧随其后的是VisualBasic.net(3.2%)和Java(2.69%)。Python如今已经已经成为大型编程语言的一部分。近20年来,C、C++和Java一直排在前三名,遥遥领先于其他语言,但Python如今已经加入到了他们的行列之中。Python是当今大学里授课最多的第一语言,在统计领域排名第一,在人工智能编程方面排名第一,在脚本编写方面排名第一,在写作系统测试方面排名第一,除此之外,Python还在Web编程和科学计算方面处于领先地位。总之,Python无处不在。2018年其他大有进步的编程语言有MATLAB(第18到第11位)、Kotlin(第39到第31位)、Rust(第46到第33位)、Julia(第47到第37位)和Type(第167到第49位)。说完了进步明显的语言,接下来看看再2018年过的相对艰辛的编程语言Ruby(第11到第18位)、Erlang(第23到第50位)、F(第40到第6
题意题目链接Sol发现abcdef是互不相关的那么meetinthemiddle一下。先算出abc的,再算def的注意d=0的时候不合法(害我wa了两发。。)#include<bits/stdc++.h> #defineLLlonglong usingnamespacestd; constintMAXN=101,SS=2e6+10; map<LL,LL>mp; intN; LLa[MAXN],ans; inta1[SS],c1,a2[SS],c2,cnt[SS]; intmain(){ //ios::sync_with_stdio(false); cin>>N; for(inti=1;i<=N;i++)cin>>a[i]; sort(a+1,a+N+1); for(inti=1;i<=N;i++) for(intj=1;j<=N;j++) for(intk=1;k<=N;k++) a1[++c1]=a[i]*a[j]+a[k]; for(inti=1;i<=N;i++) for(intj=1;j<=N;
当今前端天下以Angular、React、vue三足鼎立的局面,你不选择一个阵营基本上无法立足于前端,甚至是两个或者三个阵营都要选择,大势所趋。所以我们要时刻保持好奇心,拥抱变化,只有在不断的变化中你才能利于不败之地,保守只能等死。最近在学习Vue,一直以来对它的双向绑定只能算了解并不深入,最近几天打算深入学习下,通过几天的学习查阅资料,算是对它的原理有所认识,所以自己动手写了一个双向绑定的例子,下面我们一步步看如何实现的。看完这篇文章之后我相信你会对Vue的双向绑定原理有一个清楚的认识。也能帮助我们更好的认识Vue。先看效果图//代码: <divid="app"> <inputv-model="name"type="text"> <h1>{{name}}</h1> </div> <scriptsrc="./js/observer.js"></script> <scriptsrc="./js/watcher.
最近,谷歌爸爸又收购了一家公司。长期以来,谷歌致力于推动围绕GoogleCloud的企业业务,但在这方面一直被亚马逊和微软吊打,这次的收购正是为了弥补自身的短板。 被收购的CaskData是一家专门提供基于Hadoop的大型数据分析服务解决方案的初创公司。基于此,谷歌进一步加强他的大数据分析能力。 除了谷歌、微软、亚马逊、IBM等国际大佬全力布局大数据外,国内企业也积极投入大数据的怀抱,无论是BAT这样的大厂还是雨后春笋般涌现的创业企业,都纷纷入局。国内IT、通讯、行业招聘中,有10%都是和大数据相关,且比例还在上升。巨大的人才缺口直接导致各企业纷纷以高薪聘请大数据人才:(以上数据整理自拉勾网) 高薪的背后是人才的紧缺,有机构对一线城市2018年国内科技领域热门职位薪酬范围及跳槽涨幅进行了预测:大数据方向由于人才稀缺度较高,相同工作年限的情况下,大数据工程师的薪资普遍更高,待遇涨幅也会超过其他岗位。随着大数据的爆发,中国IT业内环境也将面临新一轮的洗牌,不仅是企业,更是从业人员转型可遇而不可求的机遇。如果将IT人士统一比作一条船上的海员,大数据就是最大的浪潮,借浪潮之势而为之,可成功从
前言这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。所有笔记可能不定期更新,发布时不一定为最终版。正文连接数据库的必要条件网络畅通用户名密码正确数据库需添加ip白名单更细粒度的验证(库表列权限类型等)权限粒度DataPrivileges数据层次的权限data:select,insert,update,deleteDefinitionPrivileges应用于逻辑对象DataBase:create,alter,dropTable:create,alter,dropview/function/trigger/procedure:create,alter,dropAdministratorPrivileges管理权限ShutdownDataBase关闭数据库ReplicationSlave搭建数据库储存结构ReplicationClient数据库储存结构的一种权限FilePrivilege文件权限,将数据库的数据文本导出等操作。创建用户并赋权1、使用mysql自带createuser
在消费升级的大趋势下,新零售通过人-货-场的重构,成为城市进行消费升级的重要着力点,也逐渐成为衡量城市竞争力的一个重要指标。2018年6月,北大光华管理学院在中国新零售之城研讨会上正式发布《新零售城市发展指数报告》,从不同的角度分析了全国36个新零售城市的发展指数。“新零售城市指数”,即从零售指标入手,旨在反映城市以新零售为抓手在效率提升方面的表现,从生产、流通、服务、交易和环境五个方面来评估与反映城市综合竞争力。“上北深杭”名列前茅其中贡献中国GDP四成以上的36个新零售之城排行榜中,上海再次超过北京成为新零售之城榜首,北京位居第二,深圳、杭州位列三四,广州仅居第五。“北上广深”被“上北深杭”取代,上海成为新零售发展第一城。几个新零售之城的发展受到很多因素的影响,新零售在各个城市中的发展参差不齐,报告中也分析了城市在日后发展的重点,快速提升新零售指数。新零售之城是什么,新在哪儿?4月26日,“新零售”的概念提出者和全球领跑者阿里巴巴抛出一枚“炸弹”——“新零售之城”:用新零售智能服务提升城市生活品质,让“新零售”从一种创新商业模式,落地为真切可感的日常生活。“新零售之城”被中国核心城
美国伊利诺伊大学香槟分校的计算机科学家提出了一种新架构,使计算和存储能更紧密地结合在一起。这一想法并不是要完全取代处理器,而是将新功能添加到内存中,这样就可以在不需要更多电力的情况下让设备变得更智能。 如果约翰·冯·诺伊曼(JohnvonNeumann)在今天设计计算机,他就不可能在处理器和内存之间建立一堵厚厚的墙。与冯·诺依曼同名的架构于1945年问世,它开启了第一批存储内存、可重复编程的计算机,而且一直是这个行业的支柱。 现在,是时候切换到一种更适合今天的数据密集型任务的设计了。2018年2月,在旧金山的国际固态电路会议(ISSCC)上,美国伊利诺伊大学香槟分校的计算机科学家NareshShanbhag和同事提出了一个新的架构,使计算和内存更紧密地结合在一起。这一想法并不是要完全取代处理器,而是将新功能添加到内存中,这样就可以在不需要更多电力的情况下让设备变得更智能。 这些科学家认为,采用此类设计可将人工智能从云端引入到消费电子产品中。用深度神经网络构建的人工智能通常通过执行一些简单的算法来完成任务,而将图像数据从存储内存移动到处理器所需的能量是运行计算的10到100倍。这就是在冯
AI智能分析网关设备内置多种深度学习算法,可支持对接入的多路视频流进行智能检测、智能识别等,包括人脸检测与识别、车辆检测与识别、车牌识别、烟火识别、安全帽识别、区域入侵检测等。将智能分析网关与EasyCVR视频融合平台联合使用,可基于云边端协同架构,提供计算、存储、网络等基础设施资源、调度管理本地资源,以及实现云端下发的资源调度管理、AI算力资源的高效调度等能力。在此前的文章中,我们介绍了关于智能分析网关V2版设备的配置与使用教程,本期我们来了解下如何在视频融合平台进行算法智能检测的视频抓拍展示。1)首先,创建一个设备,然后将该设备与智能分析网关的设备绑定起来,在添加设备时填写的国标ID参数,国标ID参数填写需要绑定的视频通道的通道ID。2)完成绑定后,点击首页,当触发报警事件时,可以在右侧预警抓拍中显示抓拍的图像,以及算法类型,如图:3)点击查看整体抓拍,还可以看到完整的抓拍图片,如图:智能分析网关的告警及抓拍功能,可应用在多场景中。当设备检测到异常时,如:发现规定区域内有人员闯入、发现烟火、车辆违停等,系统将立即触发告警,并将消息推送给管理人员。告警消息可以通过短信、电话、邮件、微
注意接入白板推流后,白板推流服务会把白板画面推送到指定的音视频房间,如果客户端不需要展示白板推流的画面,请根据白板推流的用户ID进行过滤。交互流程接入白板推流后,从开始上课到结束上课一般经过如下几个交互过程: 白板推流准备PushUserId和PushUserSig白板推流服务需要通过IM服务实时拉取白板操作信令进行白板渲染,同时需要进入到实时音视频房间内把白板画面以主路流的方式推送到房间内,以便其他用户进行流订阅,因此需要您提供一个白板推流服务进房时使用的PushUserId以及PushUserSig,生成PushUserId和PushUserSig的方法请参考如何计算UserSig。注意PushUserSig签名请设置一个较长的有效期,至少比课堂时长要长,避免由于签名过期导致白板推流中断的情况。开始白板推流在需要进行白板推流时,例如老师学生都已经准备好开始上课,您可以使用开始白板推流接口来通知白板推流服务开始白板推流,在请求接口时,需要使用到上一步准备好的PushUserId和PushUserSig。白板推流开始后,会有推流开始事件回调,建议提前注册好事件回调监听,具体注册方式参
(gdb)bt #0ngx_ssl_engine_qat_heuristic_poll(log=0x55a4ee0d3670)atmodules/nginx_qat_module/ngx_ssl_engine_qat_module.c:694 #10x000055a4eba43791inngx_ssl_async_process_fds(c=0x7f2e19705db8)atsrc/event/ngx_event_openssl.c:1675 #20x000055a4eba47817inngx_ssl_shutdown(c=0x7f2e19705db8)atsrc/event/ngx_event_openssl.c:3169 #30x000055a4eba6b267inngx_http_close_connection(c=0x7f2e19705db8)atsrc/http/ngx_http_request.c:4096 #40x000055a4eba6a131inngx_http_keepalive_handler(rev=0x7f2e13053098)atsrc/http/ngx_
参考 http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html 我的理解是: 在4.08秒响应时间内有50%的用户达到这个4.08的标准; 在4.57秒响应时间内有70%的用户达到这个4.57的标准; 在4.87秒响应时间内有80%的用户达到这个4.87的标准; 也就是原文中“50th(60/70/80/90/95th)如果把响应时间从小到大顺序排序,那么50%的请求的响应时间在这个范围之内。后面的60/70/80/90/95th也是同样的含义” 而不是说50%70%80%90%这几个比例会相互冲突;是不冲突的,只是每个时间段(如4.08、4.57、4.87)内用户所占的百分比不一样而已。
版本:0.94-cdh4.2.1 1.SplitRegion [regionserver60020-splits-1397585864985]INFOorg.apache.hadoop.hbase.regionserver.SplitRequest-Regionsplit,METAupdated,andreporttomaster.Parent=test_table,|u:21419463|1389789100286|9749216794103914,1391785640492.893d6a798767b8e819c1b205e291e89b.,newregions:test_table,|u:21419463|1389789100286|9749216794103914,1397585864985.ad6da8441218fd62b2d4a2e01e261d00.,test_table,|u:21515002|1391907324553|6451290551646972,1397585864985.49a3be1557ee19fdd9d251b5987b88ce..Splittoo
关于makefile的介绍可以看这里,很经典的教程:http://blog.csdn.net/haoel/article/details/2886。 刚刚从windows平台切换到linux平台下来写c++代码,选择vim作为代码的编辑器,因此自然而然就接触到了makefile。 因为现在写的也仅仅是小型的玩具级工程,所以目前对makefile的要求也比较低一些,只要能应对即使随意在工程中添加或者删除文件, 随意修改源文件对头文件的引用,也无需修改makefile的内容只要敲一个make命令也照样能编译好工程就可以,主要是为了方便。 现在假设整个工程的文件只有三个main.cppfoo.hfoo.cpp 看了以上链接地址中的教程,很容易能写出一个简单的makefile来: CC=g++ Output=main.out $(Output):main.ofoo.o $(CC)-o$(Output)main.ofoo.o main.o:main.cpp $(CC)-cmain.cpp foo.o:foo.cppfoo.h $(CC)-cfoo.cpp .PHONY:
eclipse安装、配置现在google已经停止了对ADTBundle的支持,现在必须分开下载eclipse、ADT和SDK。eclipse下载地址(luna4.4.1)http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR1/eclipse-java-luna-SR1-linux-gtk-x86_64.tar.gz安装ADTToaddtheADTplugintoEclipse:StartEclipse,thenselect Help > InstallNewSoftware.Click Add,inthetop-rightcorner.IntheAddRepositorydialogthatappears,enter"ADTPlugin"forthe Name andthefollowingURLforthe Location:https://dl-ssl.google.com/a
1、助教博客链接:https://www.cnblogs.com/NWNU-LHY/2、本周点评作业数量:143、本周点评的作业链接:实验三 软件工程结对项目https://www.cnblogs.com/nwnu-daizh/p/12521474.html作业提交量:14/14 作业提交率:100%作业平均分:88.07 4、本周主要工作内容:评价同学作业,与部分同学沟通git的问题,在企业微信和同学们沟通评分细则的问题。 5、本周发现的问题和解决: 问题1:极个别同学没有在git上传编码规则 问题2:结对互评博客中,将近一半的同学没有客观指出缺点,各方面都只指出优点,对缺点避而不谈。 问题3:极个别同学的核查表比较敷衍,但是大家都做了核查工作,大部分同学做的都很好很仔细。 问题4:设计实现,有一半以上的同学没有对类做分析,只是截了图放在那里。 问题5:做了流程图和类分析的同学没有使用标准流程图和类图,当然这是可以理解的,因为理论课应该还没有学到类图的画法。 问题6:极个别同学的截图超大,导致整个博客网页像是被放大了一样,注意排版。 已经解决的问题1:大家的PSP都符合事件
开机自动挂载 如果我们想实现开机自动挂载某设备,只要修改/etc/fstab文件即可。 文件挂载的配置文件:/etc/fstab 查看此文件可知 每行定义一个要挂载的文件系统; 其每行的格式如下 要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序 UUID=6efb8a23-bae1-427c-ab10-3caca95250b1 /boot xfs defaults 0 0 要挂载的设备或伪文件系统:设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc,sysfs) 挂载点:指定的文件夹 挂载选项:defaults 转储频率: 0:不做备份 &nb