Taurus.MVC 2.2.3.4 :WebAPI 实现权限控制认证(及功能增强说明)
前言:
前两天,当我还在老家收拾行旅,准备回广州,为IT连的创业再战365天时,
有网友扣上问:Taurus.MVC中如何实现认证和权限控制,最好能做个小例子。
我一不小心回了句:等回广州我再写篇文章......
然后,今天就来补文章了〜〜〜〜
Taurus.MVC Nuget 更新:
写文之前,又提前花了点时间,把Nuget的Package升级了一下,和源码版本做了下同步。
通常源码的版本都会比Nuget包的靠前一个小版本:
目前:Taurus.MVC 升级到:V2.2.3.4 (CYQ.Data 同步升级到:V5.7.8.3)
最近版本的更新内容:
V2.2.3.1(2017-05-15) 1:增加CheckFormat方法【支持参数为空或正则验证】V2.2.3.3(2017-06-16) 1:增加方法参数的支持(兼容常规webapi的使用方法) 2:CYQ.Data同时升级到V5.7.7.4V2.2.3.4(2017-07-05,2017-10-22) 1 :增强跨域支持 2:修正Query<T>(aaa,defaultValue)的默认取的取值顺序问题。 3:增加EndInvode事件和BenginInvode的事件执行顺序调整。 4:CYQ.Data同时升级到V5.7.8.3
Taurus.MVC 增强功能:兼容常规WebAPI参数写法
比如对于以下请求:
itlinks.cn/user?uid=666 itlinks.cn/user/uid/666
常规获取参数:
public void Get(){int uid = Query<int>("uid");}
兼容性写法:
public void Get(int uid){}
同时,兼容参数还可以很复杂,比如这种:
public void GetData(List<AB> unList,string a,int? b,AB ab){Write("your data A:" + unList[0].A+" your data B:" + unList[0].B, true);}
传递对应的Post的Json可能是这样的(手打的,就省了双引号了):
{ uiList:[{a:1,b:1} , {a:2,b:2}] ,a:1 ,b:2 ,ab:{a:3,b:3}}
以IT连示例:WebAPI 解决方案:
先看:IT连的后端WebApi解决方案:
再说:解决方案的创建步骤:
1:新建空Web应用程序。
即上图的:ITLinks.API ,WebAPI不需要界面,该应用程序用于存放各种Controller即可。
2:在项目的引用中用Nuget包管理引入Taurus.MVC。
Nuget包管理会自动在Web.Config中加入以下相关配置。
需要把:key=“Taurus.Controllers” 项的值:改成控制器存放的项目名称(一般名称和最终生成的dll同名)。
Taurus.MVC被引用后,仅包含两个dll,Taurus.Core和CYQ.Data。
IT连的解决方案中,对这两个dll使用了源码项目(方便于作者本人做调试或扩展功能)。
3:项目中新建各种Controller(创建请求规则)。
以IT连中的黑名单功能为例,控制器应继承自Taurus.Core.Controller:
(这里要注意一下构造函数,将自身this传递给逻辑类的构造函数)
namespace ITLinks.API {public class BlacklistController : Taurus.Core.Controller{BlacklistLogic blacklist;public BlacklistController(){blacklist = new BlacklistLogic(this);}/// <summary>/// 获取黑名单/// </summary> [Token]public void GetList(){string result = blacklist.GetList();Write(result);}[Token]public void Set(){string result = blacklist.Set();Write(result);}} }
因Web.Config中的路由类型配置为1,即路由方式为:
/控制器名称/方法名/参数
即创建了以下两个路径请求:
/blacklist/getlist /blacklist/set
理论上来说,在可以方法里写业务代码,并调用Write方法输出json格式的字符串即完成了。
不过,实际项目中,需要清晰一些的规划:
IT连的项目中,控制器被规划用来定义路由及权限等简单设定(不包括具体的业务代码)。把业务代码分离到ITLinks.Logic项目中处理了:业务逻辑类继承自:Taurus.Core.LogicBase(继承后可复用Taurus.Core.Controller中的常用方法,如Query<T>(xxx)获取参数)
如:IT连黑名单列表中的黑名单逻辑源码示例:
(这里要注意一下构造函数,定义继承父类接收控制器参数的构造函数方法)
对于IT连的的业务逻辑:
一部分:独立到解决方案ITLinks.CommonLogic中。用于功能的复用(在ASP.NET Aries的管理后台和此处的WebApi中复用同一份代码)一部分:独立到解决方案ITlinks.Aop中。用于一些第三方的消息处理。 这些,就不细讲了~~~直接飘过!
OK,接下来,我们将重点聚焦在权限安全认证这一块:
Taurus.MVC WebAPI 权限安全认证
写此之前,又扫看了一下之前写的关于Taurus.MVC的文章,发现一共才五篇,其中:
Taurus.MVC 2.0 开源发布:WebAPI开发教程 ,步骤五:有简单提到对于权限控制这一块的处理,只是不够详尽。
本文,就以 IT连 App的后端 WebAPI 的逻辑来给大伙做进一步细致说明:
首先:对于继承自Taurus.Core.Controller的控制器,都拥有以下几个可重写的方法:
public class TestController : Taurus.Core.Controller{public override bool CheckToken() { }public override bool BeforeInvoke(string methodName) { }public override void EndInvoke(string methodName) { }}
以及三个权限相关的特性[Token]、[HttpGet]、[HttpPost]:
[Token]public class TestController : Taurus.Core.Controller{[HttpGet]public void Get(){ }[HttpPost]public void Post(){ }}
特性若放在类上,即对所有方法都生效!
整个的调用顺序为:
1:调用CheckToken(如果方法标识[Token]属性)【如果返回false则中止以下执行,可人工干预】 2:检测Get或Post(如果方法标识[HttpGet]或[HttpPost]属性)【如果返回false则中止以下执行,系统自动控制】 3:调用BeforeInvoke方法【如果返回false则中止以下执行,可人工干预】 4:调用我们定义的方法,如Get或Post方法。 5:调用EndInvoke方法。
接下来,再以IT连中的请求为例讲述流程:
1:用户首次打开IT连App时,获取App的版本更新及配置信息:
此时不需权限,一切正常定义,如:
public class SysController : Controller{SysLogic sysLogic = null;public SysController(){sysLogic = new SysLogic(this);}/// <summary>/// 获取配置信息/// </summary>public void GetConfig(){string msg = sysLogic.GetConfig();Write(msg);}/// <summary>/// App版本升级/// </summary>public void Update(){string msg = sysLogic.CheckAppVersion();Write(msg);}}
2:用户登陆或注册App:
登陆注册也不需要权限验证,方法依旧如常。
public class UserController : Controller{UserLogic user;public UserController(){user = new UserLogic(this);}public void Register(){string result = user.Register();Write(result);}public void Login(){string result = user.Login();Write(result);}}
不过,在登陆或注册成功后,需要创建一个Token返回给App客端存档:
如何创建Token:可以把用户的基本固定又不重要的信息串在一起,然后加下密就可以了;比如:(用户ID+注册时间+用户名+有效日期)=》加密成:abfabcbcdxxabfabccdc 具体代码可参考 ASP.NET Aries 框架中的 UserAuth.cs 中的 GetAuthToken 方法
3:用户进入主界面,或再次打开App时:
由于用户在注册或登陆时,已经存档了Token在客户端,只要之后的请求,都带上这个Token即可。
比如用户获取自身的完整信息,或提交用户反馈是需要权限的:
public class FeedbackController : Controller{FeedbackLogic feedbackLogic = null;public FeedbackController(){feedbackLogic = new FeedbackLogic(this);}public override bool CheckToken(){string userid = UserAuth.UserID;//从用户传来的Token中解密获取数据bool result = !string.IsNullOrEmpty(userid) && UserAuth.UserID.Length == 36 && UserAuth.RegTime.Length == 8;if (!result){Write(LangConst.EC_10000, false);//返回Token验证失败 }return result;}/// <summary>/// 用户反馈建议/// </summary>/// <returns></returns> [Token]public void Set(){string result = feedbackLogic.Set();Write(result);}}
对于Set方法,需要基本的身份认证,加上了[Token]特性;
同时:需要在CheckToken方法写代码来检测用户带过来的Token是否合法:
1:从请求数据或请求头中获取(Token字符串)2:解密,较验格式及是否过期。3:根据解密的结果,来返回true或false。
具体代码仍可参考 ASP.NET Aries 框架中的 UserAuth.cs 中UserID属性是怎么被反解出来的。
这样,就完成了基本的权限认证。
Taurus.MVC WebAPI 特殊的 DefaultController
鉴于检测Token合法性的代码是一样的,业务控制器可能不少,因此需要有统一的地方:
Taurus.MVC定义了三个全局的方法,位于DefaultController中,当然这个控制器文件默认是不存在的,需要自己新建:
public class DefaultController : Controller{public static bool CheckToken(IController controller, string methodName){//将Token验证合法性的代码写在这全局的地方,对所有的Controller都生效。
string userid = UserAuth.UserID;
bool result = !string.IsNullOrEmpty(userid) && UserAuth.UserID.Length == 36 && UserAuth.RegTime.Length == 8;
if (!result)
{
controller.Write(LangConst.EC_10000, false);
}
return result;
}public static bool BeforeInvoke(IController controller, string methodName){}public static void EndInvoke(IController controller, string methodName){}}
DefaultController的全局方法的优先级:
这三个static方法的优先级,低于Controller自身同名的实例方法;即如果某个Controller已经重写了CheckToken实例方法,则全局的CheckToken不会被调 用,其它两个方法亦同。
DefaultController是Taurus.MVC的特殊的控制器,其特殊在:
1:当寻找的控制器不存在时,都会定位到DefaultController中寻找,如果DefaultController也没有,则抛出异常。2:如果方法在DefaultController中找不到时,则会调用Default方法(Taurus.Core.Controller有默认Default方法,可被重写)。 3:三个全局的统一方法,被命运安排在这里。
总结:
你值的拥有!
接下来又得把线程切回去继续写IT连创业系列、以及IOS的Sagit.Framework开发框架系列了!
转载于:https://www.cnblogs.com/cyq1162/p/8476427.html
Taurus.MVC 2.2.3.4 :WebAPI 实现权限控制认证(及功能增强说明)相关推荐
- 在ASP.NET MVC里对Web Page网页进行权限控制
我们在ASP.NET MVC开发时,有时候还是得设计ASP.NET的Web Page网页(.aspx和.aspx.cs),来实现一些ASP.NET MVC无法实现的功能,如此篇<Visual S ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- Taurus.MVC 2.0 开源发布:WebAPI开发教程
背景: 有用户反映,Tausus.MVC 能写WebAPI么? 能! 教程呢? 嗯,木有! 好吧,刚好2.0出来,就带上WEBAPI教程了! 开源地址: https://github.com/cyq1 ...
- 开源:Taurus.MVC 框架 (已支持.NET Core)
为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate,代码不堪入目,Bug无限,经常点 ...
- Taurus.MVC 如何升级并运行在NET6、NET7
前言: 之前计划帮某公司架构一个从WPF转向Web的低代码的开发平台,并构思为Taurus.MVC 新增微服务的基础功能模块,提供便捷的微服务开发方式,因中途合作中止,代码开发部分后续再上. 最近看到 ...
- 开源:Taurus.MVC 框架
为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate,代码不堪入目,Bug无限,经常点 ...
- [置顶]开源:Taurus.MVC 框架
为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate,代码不堪入目,Bug无限,经常点 ...
- Taurus MVC框架
Taurus.MVC 源码: 1:源代码SVN:https://github.com/cyq1162/Taurus.MVC 2:Demo演示站:http://taurus.cyqdata.com De ...
- Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。
Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单. 前方: 开源地址:GitHub - cyq1162/Taurus.MVC: Taurus.mvc i ...
最新文章
- C#获取一些常用目录
- 3socket编程:UDP编程
- 程序人生:32条软件开发的建议和教训,值得读一读!
- 关于VC预定义常量_WIN32,WIN32,_WIN64等预定义宏的介绍(整理、转载)
- day 22 封装 + property + classmethod + staticmethod
- 没有副业的人,太难了。。。
- 蔬菜大棚成本_蔬菜大棚建造成本和种植利润分析
- 485通信原理_关于串口通信(232、485、422)和常见问题,一篇文章就给你说清楚~...
- python论文画图模板
- 可以免费下载任何文档(网页转换助手)
- python计算机视觉 相机标定--张正友棋盘格标定法
- 【JY】STKO助力OpenSEES系列:结构模态分析以及动力特性(MDOF与等效SDOF验证)
- [1049]since it exceeds Excel‘s limit of 65,530 URLS per worksheet
- 任正非创业期间得抑郁症:研发失败我就跳楼
- python从入门到入土表情包-我用Python一键保存了半佛老师所有的骚气表情包
- 考研人最烦的6句话,教你霸气回怼!
- 计算机科学与技术论文选题怎么选,比较好写的计算机科学与技术专业论文选题 计算机科学与技术专业论文题目如何取...
- 《俄罗斯方块》项目简介
- 《海边的卡夫卡》读书笔记
- 【小知识】光的偏振态及镜头前加偏振片的去噪原理
热门文章
- App-Charle抓包配置(https)
- 电子设计大赛-放大器类题目分析
- Linux学习:Linux启动过程的问题解决
- [GIS原理] 8.1 空间分析-网络分析
- 音圈电机可以根据实际需求定制方案
- 高等数学在c语言中的应用例子,平顶山学院《高等数学》《C语言》试题.doc
- 计算机网络:网络应用服务
- sed字符串替换用法大全
- 非隔离AC-DC恒压开关电源控制驱动降压芯片功能应用及原理图参考
- MessageSolution企业邮件归档管理系统EEA信息泄露漏洞(cnvd-2021-10543)