详解ASPNET MVC Form表单验证.docx
- 文档编号:16602
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:18
- 大小:17.51KB
详解ASPNET MVC Form表单验证.docx
《详解ASPNET MVC Form表单验证.docx》由会员分享,可在线阅读,更多相关《详解ASPNET MVC Form表单验证.docx(18页珍藏版)》请在冰豆网上搜索。
详解ASPNETMVCForm表单验证
这篇文章主要为大家详细介绍了ASP.NETMVCForm表单验证,一般验证方式有Windows验证和表单验证,web项目用得更多的是表单验证,感兴趣的小伙伴们可以参考一下
一、前言
关于表单验证,已经有不少的文章,相信Web开发人员也都基本写过,最近在一个个人项目中刚好用到,在这里与大家分享一下。
本来想从用户注册开始写起,但发现东西比较多,涉及到界面、前端验证、前端加密、后台解密、用户密码Hash、权限验证等等,文章写起来可能会很长,所以这里主要介绍的是登录验证和权限控制部分,有兴趣的朋友欢迎一起交流。
一般验证方式有Windows验证和表单验证,web项目用得更多的是表单验证。
原理很简单,简单地说就是利用浏览器的cookie,将验证令牌存储在客户端浏览器上,cookie每次会随请求发送到服务器,服务器验证这个令牌。
通常一个系统的用户会分为多种角色:
匿名用户、普通用户和管理员;这里面又可以再细分,例如用户可以是普通用户或Vip用户,管理员可以是普通管理员或超级管理员等。
在项目中,我们有的页面可能只允许管理员查看,有的只允许登录用户查看,这就是角色区分(Roles);某些特别情况下,有些页面可能只允许叫“张三”名字的人查看,这就是用户区分(Users)。
我们先看一下最后要实现的效果:
1.这是在Action级别的控制。
publicclassHome1Controller:
Controller
{
//匿名访问
publicActionResultIndex()
{
returnView();
}
//登录用户访问
[RequestAuthorize]
publicActionResultIndex2()
{
returnView();
}
//登录用户,张三才能访问
[RequestAuthorize(Users="张三")]
publicActionResultIndex3()
{
returnView();
}
//管理员访问
[RequestAuthorize(Roles="Admin")]
publicActionResultIndex4()
{
returnView();
}
}
2.这是在Controller级别的控制。
当然,如果某个Action需要匿名访问,也是允许的,因为控制级别上,Action优先级大于Controller。
//Controller级别的权限控制
[RequestAuthorize(User="张三")]
publicclassHome2Controller:
Controller
{
//登录用户访问
publicActionResultIndex()
{
returnView();
}
//允许匿名访问
[AllowAnonymous]
publicActionResultIndex2()
{
returnView();
}
}
3.Area级别的控制。
有时候我们会把一些模块做成分区,当然这里也可以在Area的Controller和Action进行标记。
从上面可以看到,我们需要在各个地方进行标记权限,如果把Roles和Users硬写在程序中,不是很好的做法。
我希望能更简单一点,在配置文件进行说明。
例如如下配置:
<?
xmlversion="1.0"encoding="utf-8"?
>
<!
--
1.这里可以把权限控制转移到配置文件,这样就不用在程序中写roles和users了
2.如果程序也写了,那么将覆盖配置文件的。
3.action级别的优先级>controller级别>Area级别
-->
<root>
<!
--area级别-->
<areaname="Admin">
<roles>Admin</roles>
</area>
<!
--controller级别-->
<controllername="Home2">
<user>张三</user>
</controller>
<!
--action级别-->
<controllername="Home1">
<actionname="Inde3">
<users>张三</users>
</action>
<actionname="Index4">
<roles>Admin</roles>
</action>
</controller>
</root>
写在配置文件里,是为了方便管理,如果程序里也写了,将覆盖配置文件的。
ok,下面进入正题。
二、主要接口
先看两个主要用到的接口。
IPrincipal定义了用户对象的基本功能,接口定义如下:
publicinterfaceIPrincipal
{
//标识对象
IIdentityIdentity{get;}
//判断当前角色是否属于指定的角色
boolIsInRole(stringrole);
}
它有两个主要成员,IsInRole用于判断当前对象是否属于指定角色的,IIdentity定义了标识对象信息。
HttpContext的User属性就是IPrincipal类型的。
IIdentity定义了标识对象的基本功能,接口定义如下:
publicinterfaceIIdentity
{
//身份验证类型
stringAuthenticationType{get;}
//是否验证通过
boolIsAuthenticated{get;}
//用户名
stringName{get;}
}
IIdentity包含了一些用户信息,但有时候我们需要存储更多信息,例如用户ID、用户角色等,这些信息会被序列到cookie中加密保存,验证通过时可以解码再反序列化获得,状态得以保存。
例如定义一个UserData。
publicclassUserData:
IUserData
{
publiclongUserID{get;set;}
publicstringUserName{get;set;}
publicstringUserRole{get;set;}
publicboolIsInRole(stringrole)
{
if(string.IsNullOrEmpty(role))
{
returntrue;
}
returnrole.Split(',').Any(item=>item.Equals(this.UserRole,StringComparison.OrdinalIgnoreCase));
}
publicboolIsInUser(stringuser)
{
if(string.IsNullOrEmpty(user))
{
returntrue;
}
returnuser.Split(',').Any(item=>item.Equals(this.UserName,StringComparison.OrdinalIgnoreCase));
}
}
UserData实现了IUserData接口,该接口定义了两个方法:
IsInRole和IsInUser,分别用于判断当前用户角色和用户名是否符合要求。
该接口定义如下:
publicinterfaceIUserData
{
boolIsInRole(stringrole);
boolIsInUser(stringuser);
}
接下来定义一个Principal实现IPrincipal接口,如下:
publicclassPrincipal:
IPrincipal
{
publicIIdentityIdentity{get;privateset;}
publicIUserDataUserData{get;set;}
publicPrincipal(FormsAuthenticationTicketticket,IUserDatauserData)
{
EnsureHelper.EnsureNotNull(ticket,"ticket");
EnsureHelper.EnsureNotNull(userData,"userData");
this.Identity=newFormsIdentity(ticket);
this.UserData=userData;
}
publicbool
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 详解ASPNET MVC Form表单验证 详解 ASPNET Form 表单 验证
![提示](https://static.bdocx.com/images/bang_tan.gif)