说一说MVC的Authentication过滤(四)
前沿:
一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到
Session中存储的用户基本信息,查看比较他有没有登录和能否访问当前页面。
Session的原理,也就是在服务器端生成一个SessionID对应了存储的用户数据,而SessionID存储在Cookie中,客户端以后每次请求都会带上这个
Cookie,服务器端根据Cookie中的SessionID找到存储在服务器端的对应当前用户的数据。
FormsAuthentication是微软提供给我们开发人员使用,做身份认证使用的。通过该认证,我们可以把用户Name 和部分用户数据存储在Cookie中,
通过基本的条件设置可以,很简单的实现基本的身份角色认证。
1.配置项
在网站根目录配置web.config
<authentication>
<forms name=".ASPXAUTH" loginUrl="account/index" defaultUrl="http://www.baidu.com" protection="All" timeout="" path="/" requireSSL="false" slidingExpiration="true" enableCrossAppRedirects="false" cookieless="UseDeviceProfile" domain="" ></forms>
</authentication>
2.控制器代码
public class accountController : Controller
{
// GET: account
public ActionResult Index()
{
return View();
}
[Authentication]
public ActionResult Demo() => View();
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(string username,string userpwd)
{
List<LoginVm> userlist = new List<LoginVm>()//模拟数据
{
new LoginVm() { name="Zara", pwd="",State=},
new LoginVm(){name="aaaa",pwd="",State=}
}; if (!ModelState.IsValid)
{
return View();
}
bool status = Request.IsAuthenticated;
LoginVm vm = userlist.FirstOrDefault(u => u.name == username && u.pwd == userpwd);
JavaScriptSerializer serial = new JavaScriptSerializer();
//判断是否存在 且状态ok
if (vm!=null)
{
if (vm.State==)Content("您倍封号"); FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
, vm.name, DateTime.Now, DateTime.Now.AddMinutes(), false, serial.Serialize(vm));
string encrytedTicket = FormsAuthentication.Encrypt(authTicket);//创建票据
//响应客户端
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName,encrytedTicket);
HttpContext.Response.Cookies.Add(authCookie);
}
return View();
}
}
3.过滤器方面
/// <summary>
/// 该过滤器为网站提供服务
/// 服务内容:行为添加标记即可进行过滤.不用在每个action中进行过滤!
/// </summary>
public class AuthenticationAttribute: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{ if (!filterContext.RequestContext.HttpContext.Request.IsAuthenticated)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new JsonResult
{
Data = new
{
Status = -,
Message = "登录过期,请重新登录!"
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
else
{
FormsAuthentication.RedirectToLoginPage();//重定向会登录页
}
}
else
{
var cookie = filterContext.HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName];
//解密用户票据
var ticket = FormsAuthentication.Decrypt(cookie.Value);
//将密文映射到实体模型
LoginVm admin = new JavaScriptSerializer().Deserialize<LoginVm>(ticket.UserData);
//将数据放到ViewData里 方面页面使用
filterContext.Controller.ViewData["username"] = admin.name;
filterContext.Controller.ViewData["userpwd"] = admin.pwd;
}
//Don't forget this one
base.OnActionExecuting(filterContext);
}
}
我们可以在aciton行为中添加需要登录的视图,这样封装一起就不用一个一个在控制器搞了...
说一说MVC的Authentication过滤(四)的更多相关文章
- [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)
目录 1. 介绍 2. 软件环境 3. 在运行示例代码之前(源代码 + 示例登陆帐号) 4. jqGrid和AJAX 5. GridSettings 6. ...
- Asp.net mvc 知多少(四)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- ASP.NET MVC案例教程(四)
ASP.NET MVC案例教程(四) 前言 通过前几篇文章,我们已经能比较自如的使用ASP.NET MVC来呈现页面和数据了.但是,有一个大问题没有解决:如何处理表单数据.例如,我们将要实现的公告发布 ...
- ASP.NET MVC 5 Authentication Breakdown
In my previous post, "ASP.NET MVC 5 Authentication Breakdown", I broke down all the parts ...
- .NET MVC 学习笔记(四)— 基于Bootstarp自定义弹出框
.NET MVC 学习笔记(四)—— 基于Bootstarp自定义弹出框 转载自:https://www.cnblogs.com/nele/p/5327380.html (function ($) { ...
- 自己写一个java的mvc框架吧(四)
自己写一个mvc框架吧(四) 写一个请求的入口,以及初始化框架 上一章写了获取方法的入参,并根据入参的参数类型进行数据转换.这时候,我们已经具备了通过反射调用方法的一切必要条件.现在我们缺少一个htt ...
- Asp.Net MVC Filter权限过滤使用说明
相信对权限过滤大家都不陌生,用户要访问一个页面时,先对其权限进行判断并进行相应的处理动作. mvc中是如何实现权限验证的? mvc中是根据路由配置来请求控制器类中的一个方法 在mvc框架中为程序员提供 ...
- Spring MVC 学习总结(四)——视图与综合示例
一.表单标签库 1.1.简介 从Spring2.0起就提供了一组全面的自动数据绑定标签来处理表单元素.生成的标签兼容HTML 4.01与XHTML 1.0.表单标签库中包含了可以用在JSP页面中渲染H ...
- MVC中Action 过滤
总结Action过滤器实用功能,常用的分为以下两个方面: 1.Action过滤器主要功能就是针对客服端请求过来的对象行为进行过滤,类似于门卫或者保安的职能,通过Action过滤能够避免一些非必要的深层 ...
随机推荐
- UOJ#41. 【清华集训2014】矩阵变换 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ41.html 题解 首先写个乱搞: 一开始每一行都选择第一个非0元素,然后,我们对这个方案不断做更新,直到 ...
- Manacher算法 (马拉车算法)
#include<iostream> #include<string.h> #include<algorithm> using namespace std; ]; ...
- Hadoop的数据压缩
一.Hadoop的数据压缩 1.概述 在进行MR程序的过程中,在Mapper和Reducer端会发生大量的数据传输和磁盘IO,如果在这个过程中对数据进行压缩处理,可以有效的减少底层存储(HDFS)读写 ...
- java中的static代码块为什么只执行一次
原因在最后,这是其中的一个小例子. 如: SessionFactory负责保存和使用所有配置信息,消耗内存资源非常大 所以一个web项目要保证只创建一个SessionFactory 那么在使用hibe ...
- SQL Server Governer 控制资源的使用
--- Create a resource pool for production processing --- and set limits. USE master; GO CREATE R ...
- BZOJ.4145.[AMPPZ2014]The Prices(状压DP)
BZOJ 比较裸的状压DP. 刚开始写麻烦惹... \(f[i][s]\)表示考虑了前\(i\)家商店,所买物品状态为\(s\)的最小花费. 可以写求一遍一定去\(i\)商店的\(f[i]\)(\(f ...
- Markdown初使用
Markdown是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式. 相比WYSIWYG编辑器 优点:1.因为是纯文本,所以只要支持Markdown的地方都能获得一样的 ...
- VB读写进程的内存
在窗体部分简单测试了ReadProcessMemory和WriteProcessMemory对另一个程序进程的读写. 由于临时项目变动,又不需要了,所以直接封类,删工程.以下代码没有一个函数经过测试, ...
- 七牛云音频转码准备工作之如何创建音视频处理私有队列pipeline
如何创建音视频处理私有队列 最近更新时间:2017-08-28 15:54:45 在七牛进行音视频处理,推荐使用私有队列(pipeline). 创建私有队列方法如下: 第一步 登录七牛开发者平台 ht ...
- vue实现二级联动效果
你如城市与省份间的二级联动效果 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...