一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

Asp .Net Core 2.0 登录授权以及多用户登录

用户登录是一个非常常见的应用场景 .net core 2.0 的登录方式发生了点变化,应该是属于是良性的变化,变得更方便,更容易扩展。 配置 打开项目中的Startup.cs文件,找到ConfigureServices方法,我们通常在这个方法里面做依赖注入的相关配置。添加如下代码:

这段代码的大概意思就是,添加授权支持,并添加使用Cookie的方式,配置登录页面和没有权限时的跳转页面。 再找到Configure方法,添加 app.UseAuthentication(),使用授权:

这样基本的配置就完成了。 登录 添加一个Controller,如AccountController,再添加一个Action,如 Login,所配置的路由,要与上面的配置对应,不然跳转登录时会跳错页面。 用户提交用户名和密码,登录代码大致如下:

这里要注意的是 AuthenticationType 所设置的Scheme一定要与前面的配置一样,这样对应的登录授权才会生效。 使用登录身份 登录的目录,就是希望有些页面或者资源只有登录以后才可访问。使用AuthorizeAttribute来做限制。在需要做限制的Controller上加上[Authorize]特性来做限制。

这样这个Controller下的所有的Action都必需要登录后才可访问。如果希望其中某些Action可以不用登录也可访问,可以添加例外:

到这里一个最基础的登录就完成了。 在Web项目中,通常会遇到一个问题,后端管理员和前台用户。这两个用户都是可登录的,在 .net core 2.0,这个将很容易实现。 多用户登录 添加一个登录方案(Scheme) CookieAuthenticationDefaults.AuthenticationScheme,这是系统已经定义好的一个默认的登录方案,添加一个新的来实现一个不同的身份登录。代码如下:

添加使用这个新的方案,在Startup.cs文件下:

添加新的登录方案,并配置一个新的登录页面,登录的方法和刚才是一样,只是AuthenticationType使用了新的方案。

验证登录状态 使用方法和之前的差不多,换成新的CustomerAuthorizeAttribute就行了:

CustomerAuthorizeAttribute这个类,不是必需的,只是为了方便使用而写,其实完全可以只定义一个新的方案(Scheme)就行了。 谁才是HttpContext.User? 登录了多个用户,那么谁才是HttpContext.User呢?如果你的Controller或者Action上有使用AuthorizeAttribute,那这个Attribute使用的登录方案是哪个,则这个HttpContext.User对应的就是那个方案的登录用户。如果没有使用,则AddAuthentication()方法默认指它的方案(Scheme)所登录的用户,就是这个HttpContext.User了。 如何获取对应方案的登录用户呢?使用HttpContext.AuthenticateAsync

退出登录 这个就简单了,指定方案退出就可以了。

from:http://www.zkea.net/codesnippet/detail/asp-net-core-multi-login-user.html

龙生   02 Sep 2019
View Details

ASP.NET CORE中使用Cookie身份认证

大家在使用ASP.NET的时候一定都用过FormsAuthentication做登录用户的身份认证,FormsAuthentication的核心就是Cookie,ASP.NET会将用户名存储在Cookie中。 现在到了ASP.NET CORE的时代,但是ASP.NET CORE中没有FormsAuthentication这个东西,那么怎么做身份认证呢?答案是ASP.NET CORE已经为我们内置了Cookie身份认证的功能,而且使用起来非常方便,注意本文是基于ASP.NET CORE 2.0版本来阐述Cookie认证方式的。   1.从ASP.NET CORE OWIN框架中启用Cookie身份认证功能 要在ASP.NET CORE中使用Cookie身份认证,第一步就是在项目中的OWIN框架文件Startup.cs中启用Cookie身份认证中间件。 首先我们在Startup中的ConfigureServices方法中使用services.AddAuthentication注册Cookie认证服务,如下代码所示:

然后在Startup中的Configure方法中使用app.UseAuthentication启用Cookie认证中间件(注意其中app.UseAuthentication和app.UseMvc的调用顺序不能反),如下代码所示:

这里顺便说一下app.UseAuthentication是用来干什么的,app.UseAuthentication会启用Authentication中间件,该中间件会根据当前Http请求中的Cookie信息来设置HttpContext.User属性(后面会用到),所以只有在app.UseAuthentication方法之后注册的中间件才能够从HttpContext.User中读取到值,这也是为什么上面强调app.UseAuthentication方法一定要放在下面的app.UseMvc方法前面,因为只有这样ASP.NET Core的MVC中间件中才能读取到HttpContext.User的值。     2.登录用户 在ASP.NET CORE中使用Cookie认证登录用户的方法和传统的FormsAuthentication不太一样,大致步骤如下: 创建Claim类型的数组,将登录用户的所有信息(比如用户名)存储在Claim类型的字符串键值对中 将上面创建的Claim类型的数组传入ClaimsIdentity中,用来构造一个ClaimsIdentity对象 将上面创建的ClaimsIdentity对象传入ClaimsPrincipal中,用来构造一个ClaimsPrincipal对象 调用HttpContext.SignInAsync方法,传入上面创建的ClaimsPrincipal对象,完成用户登录 所以我们可以看到整个ASP.NET CORE的Cookie认证登录流程比以前ASP.NET的FormsAuthentication还是要复杂许多,毕竟以前一个FormsAuthentication.SetAuthCookie方法就搞定了。   在本文的例子中我们在项目中默认的HomeController中创建了一个Acion方法Login,来实现用户登录的代码。当然这里我们实现的是最简的Cookie登录,下面代码中实际上还可以设置Cookie是否持久化、Cookie多久过期、存储登录用户信息的Cookie的名字是什么等,我们就不做过多介绍了,大家可以阅读本文最后推荐的两份官方文档了解更多。 Login方法的代码如下:

  如果当前Http请求本来登录了用户A,现在调用HttpContext.SignInAsync方法登录用户B,那么相当于注销用户A,登录用户B     3.读取登录用户信息 那么用户登录后怎么将登录用户的信息(比如用户名)读取出来呢?我们在HomeController的Index方法中演示了如何判断当前用户是否已经登录,并且读出登录用户的用户名,Index方法的代码如下所示:

注意,最好还是用HttpContext.User.Identity.IsAuthenticated来判断用户是否已经登录     4.注销用户 那么登录用户后怎么注销登录呢?我们在HomeController的Logout方法中演示了如何注销登录的用户,代码如下所示:

如果当前Http请求本来就没有登录用户,那么调用HttpContext.SignOutAsync方法时也不会报错     5.负载均衡   警告: ASP.NET Core使用 ASP.NET Core data protection stack 来实现Cookie身份认证。如果在服务器集群中必须配置 ASP.NET Core Data Protection,有关详细信息,请参阅 Configuring data protection。如果你的ASP.NET Core站点使用了负载均衡部署了多个实例,就要做ASP.NET Core Data Protection的配置,否则ASP.NET CORE跨多个实例进行Cookie身份认证会失败。 还可以参考:Host ASP.NET Core in a web farm 以及 Share authentication cookies among ASP.NET apps 如何管理ASP.NET Core Data Protection的过期key,可以查看:Data Protection – […]

龙生   02 Sep 2019
View Details

php-浮点数计算,double类型数加减乘除必须用PHP提供的高精度计算函数

一、前方有坑 php在使用加减乘除等运算符计算浮点数的时候,经常会出现意想不到的结果,特别是关于财务数据方面的计算,给不少工程师惹了很多的麻烦。比如今天工作终于到的一个案例: $a = 2586; $b = 2585.98; var_dump($a-$b); 期望的结果是:float(0.02) 实际结果: float(0.019999999999982)   人生有坑,处处提防 二、防坑攻略: 1、通过乘100的方式转化为整数加减,然后在除以100转化回来…… 2、使用number_format转化成字符串,然后在使用(float)强转回来…… 3、php提供了高精度计算的函数库,实际上就是为了解决这个浮点数计算问题而生的。 主要函数有: bcadd — 将两个高精度数字相加 bccomp — 比较两个高精度数字,返回-1, 0, 1 bcdiv — 将两个高精度数字相除 bcmod — 求高精度数字余数 bcmul — 将两个高精度数字相乘 bcpow — 求高精度数字乘方 bcpowmod — 求高精度数字乘方求模,数论里非常常用 bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=” bcsqrt — 求高精度数字平方根 bcsub — 将两个高精度数字相减 前两种流氓的办法就不测试了,使用bcsub测试第三种两数相减的例子, 先看bcsub用法(来自官网) string bcsub ( string $left_operand , string $right_operand [, int $scale = int ] ) 参数 left_operand 字符串类型的左操作数. right_operand 字符串类型的右操作数. scale 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。 返回值 返回减法之后结果为字符串类型. 测试代码: var_dump(bcsub($a,$b,2)); 结果 0.02 其他的函数请参考PHP官方网站 三、为啥有坑: php的bug?不是,这是所有语言基本上都会遇到的问题,所以基本上大部分语言都提供了精准计算的类库或函数库。 要搞明白这个原因, […]

龙生   26 Aug 2019
View Details

ab压力测试工具

 

 

 

 

  安装ab测试工具

  ab工具帮助 ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。

  使用举例:

  from:https://www.e-learn.cn/content/linux/1134148

龙生   21 Aug 2019
View Details

超实用压力测试工具-ab工具

写在前面 在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。 计算公式:总请求数 / 处理完成这些请求数所花费的时间,即 Request per second = Complete requests / Time taken for tests 并发连接数(The number of concurrent connections) 概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。 并发用户数(The number of concurrent users,Concurrency Level) 概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。 用户平均请求等待时间(Time per request) 计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即 Time per request = Time taken for tests /( Complete requests / Concurrency Level) 服务器平均请求等待时间(Time per request: across all concurrent requests) 计算公式:处理完成所有请求数所花费的时间 / 总请求数,即 Time taken for / testsComplete requests 可以看到,它是吞吐率的倒数。 同时,它也=用户平均请求等待时间/并发用户数,即 Time per request / Concurrency Level ab工具简介 ab全称为:apache bench 在官网上的解释如下: ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。 其他网站解释: ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。 下载ab工具 进入apache官网 http://httpd.apache.org/ 下载apache即可 启动ab工具 […]

龙生   21 Aug 2019
View Details

从某广告软文上摘下来的PHP程序员的进阶图谱

第一阶段1-2年   第二阶段2-3年   第三阶段3-5年

龙生   20 Aug 2019
View Details

CentOS7安装k8s

借鉴博客:https://www.cnblogs.com/xkops/p/6169034.html 此博客里面有每个k8s配置文件的注释:https://blog.csdn.net/qq_35904833/article/details/78190257   啊西吧,啊西吧,根据上面的博客终于安装成功了。妈的,网上大部分博客安装k8s配置写得乱七八槽的,终于找到一篇条理清晰,安装详细的k8s安装博客啦,哈哈哈哈,不容易啊快三个星期了,从狗屁不懂搞这玩意。   下面写一写我自己的安装流程:   一、安装准备: 准备两台服务器(我用的是CentOS7系统):192.168.26.227,192.168.26.228 一主一从: master机:192.168.26.227 node机:192.168.26.228     简单说一下k8s:         k8s是个什么玩意? 可以这样去理解:k8s全称:Kubernetes,它可以看作是一个分布式系统支撑平台。           我们为什么要用k8s集群? 故障自愈: k8s这个玩意可以监控容器运行,我们把项目放到容器里。由于一些外部内部原因服务器承受不住压力,如果主节点上的容器突然挂了,k8s立刻会自己将主机上的服务调度到另一个node机器上运行 应用更新: 更新项目上线时不用中断当前项目的运行。   还有一些自动扩容,缩容的概念就不讲了,我本人也没亲身体会用过,不好说。             k8s的全生命周期管理: 在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。          k8s的主要组件,以及它们主要是用来干什么的: etcd:一款开源软件。提供可靠的分布式数据存储服务,用于持久化存储K8s集群的配置和状态   apiservice:用户程序(如kubectl)、K8s其它组件之间通信的接口。K8s其它组件之间不直接通信,而是通过API server通信的。这一点在上图的连接中可以体现,例如,只有API server连接了etcd,即其它组件更新K8s集群的状态时,只能通过API server读写etcd中的数据。   Scheduler:排程组件,为用户应用的每一可部署组件分配工作结点。   controller-manager:执行集群级别的功能,如复制组件、追踪工作结点状态、处理结点失败等。Controller Manager组件是由多个控制器组成的,其中很多控制器是按K8s的资源类型划分的,如Replication Manager(管理ReplicationController 资源),ReplicaSet Controller,PersistentVolume controller。   kube-proxy:在应用组件间负载均衡网络流量。   kubelet:管理工作结点上的容器。   Contriner runtime Docker, rkt等实际运行容器的组件   上面都是些k8s集群所要用到的组件,具体这些组件都是用来干嘛的呢,我们来好好分析分析。 master主机上192.168.26.277必须要有的组件: etcd  :提供分布式数据存储的数据库吧,用于持久化存储k8s集群的配置和状态 kube-apiserver:api service提供了http rest接口,是整个集群的入口,K8s其它组件之间不直接通信,而是通过API server通信的。(只有API server连接了etcd,即其它组件更新K8s集群的状态时,只能通过API server读写etcd中的数据) kube-scheduler:scheduler负责资源的调度 kube-controller-manager:整个集群的管理控制中心,此组件里面是由多个控制器组成的,如:Replication Manager(管理ReplicationController 资源),ReplicaSet Controller,PersistentVolume controller。主要作用用来复制组件、追踪工作结点状态、处理失败结点   node节点机上192.168.26.228必须要有的组件: flannel:好像是用来支持网络通信的吧 kube-proxy:用来负载均衡网络流量 kubelet:用来管理node节点机上的容器 docker:运行项目镜像容器的组件     2018年11月30日: 今天又看了一些博客,多了一些认识和理解,如下:         k8s的整个集群运行原理:【重点核心知识很重要】 master主机上的kube-controller-manager是整个集群的控制管理中心,kube-controler-manager中的node controller模块 通过apiservice提供的监听接口,实时监控node机的状态信息。 当某个node机器宕机,controller-manager就会及时排除故障并自动修复。   node节点机上的kubelet进程每隔一段时间周期就会调用一次apiservice接口报告自身状态,apiservice接口接受到这些信息后将节点状态更新到ectd中。kubelet也通过apiservice的监听接口监听pod信息,如果监控到新的pod副本被调度绑定到本节点,则执行pod对应的容器的创建和启动,如果监听到pod对象被删除,则删除本节点对应的pod容器。(目前对pod、容器、镜像这些概念还不是很清晰,无法在大脑中构建这都是些什么玩意,先做个笔记记着吧)     […]

龙生   15 Aug 2019
View Details

手把手教你在 windows 系统上安装或卸载 Tomcat 服务

1 准备 下载 tomcat 首先在 tomcat 官网上下载 windows 版本的 tomcat 包。因为只有 windows 版本中才有用于安装或卸载 Tomcat 服务的 service.bat。 解压为文件夹,假设 tomcat 的解压路径为 ${TOMCAT_HOME} 通过命令行,进入 ${TOMCAT_HOME}/bin 2 安装 Tomcat 服务 输入命令:

  这里我们可以把启动类型改为 “自动”,这样如果服务器重启,就会自动启动服务啦。 快速进入 “服务” 列表的方法:win+R 打开运行窗口,然后输入 services.msc 建议把服务的名称加上端口号,这样方便管理哦O(∩_∩)O~ 如果启动服务时报错,查看 tomcat 日志发现是 “不是有效的 Win32 应用程序” 引起的。这可能是操作系统的问题(比如 windows server 2007),这时只需下载一个 32 位的 windows 版的 tomcat 包即可解决。 3 卸载 Tomcat 服务 输入命令:

  是不是很简单呀O(∩_∩)O哈哈~   from:https://blog.csdn.net/deniro_li/article/details/79093390

龙生   08 Aug 2019
View Details

October CMS – 快速入门 2 基本概念

October CMS 的后台管理很简单,没有多余的功能。
首页部分是【仪表盘】显示了系统的基本信息。
内容管理系统:这里可以设置页面、部件、布局、内容块、资源和组件。
媒体:是用于管理系统中的各种媒体资源,包括图片、音频、视频、文档等。默认是存储在服务器本地的。我们可以上传这些内容到服务器,也可以建立更多的目录对这些资源进行分别存储。
设置:默认情况下设置里面没有太多的设置,默认包含邮件、日志以及系统和内容功能。我们可以在系统中进行管理员的管理,用于控制用户具有的权限。后面,我们将学习插件是如何工作的。

龙生   02 Aug 2019
View Details

October CMS – 快速入门 1 安装

按照laravel开发环境的要求安装环境,必不可少的是composer了。
在命令行执行
composer create-project october/october octobermovie
上述命令完成后,进入对应的目录,这里执行
cd octobermovie
php artisan october:install

龙生   02 Aug 2019
View Details
1 105 106 107 282