前沿:

一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在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过滤(四)的更多相关文章

  1. [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)

    目录 1.   介绍 2.   软件环境 3.   在运行示例代码之前(源代码 + 示例登陆帐号) 4.         jqGrid和AJAX 5.         GridSettings 6.  ...

  2. Asp.net mvc 知多少(四)

    本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...

  3. ASP.NET MVC案例教程(四)

    ASP.NET MVC案例教程(四) 前言 通过前几篇文章,我们已经能比较自如的使用ASP.NET MVC来呈现页面和数据了.但是,有一个大问题没有解决:如何处理表单数据.例如,我们将要实现的公告发布 ...

  4. ASP.NET MVC 5 Authentication Breakdown

    In my previous post, "ASP.NET MVC 5 Authentication Breakdown", I broke down all the parts ...

  5. .NET MVC 学习笔记(四)— 基于Bootstarp自定义弹出框

    .NET MVC 学习笔记(四)—— 基于Bootstarp自定义弹出框 转载自:https://www.cnblogs.com/nele/p/5327380.html (function ($) { ...

  6. 自己写一个java的mvc框架吧(四)

    自己写一个mvc框架吧(四) 写一个请求的入口,以及初始化框架 上一章写了获取方法的入参,并根据入参的参数类型进行数据转换.这时候,我们已经具备了通过反射调用方法的一切必要条件.现在我们缺少一个htt ...

  7. Asp.Net MVC Filter权限过滤使用说明

    相信对权限过滤大家都不陌生,用户要访问一个页面时,先对其权限进行判断并进行相应的处理动作. mvc中是如何实现权限验证的? mvc中是根据路由配置来请求控制器类中的一个方法 在mvc框架中为程序员提供 ...

  8. Spring MVC 学习总结(四)——视图与综合示例

    一.表单标签库 1.1.简介 从Spring2.0起就提供了一组全面的自动数据绑定标签来处理表单元素.生成的标签兼容HTML 4.01与XHTML 1.0.表单标签库中包含了可以用在JSP页面中渲染H ...

  9. MVC中Action 过滤

    总结Action过滤器实用功能,常用的分为以下两个方面: 1.Action过滤器主要功能就是针对客服端请求过来的对象行为进行过滤,类似于门卫或者保安的职能,通过Action过滤能够避免一些非必要的深层 ...

随机推荐

  1. C语言第01次作业--顺序、分支结构

    1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本周我学到了很多C语言中基础的结构和语法(见思维导图),能对一些生活中的简单问题对应编写程序解决一些这些简单 ...

  2. vue vue-resource的特点

    1.vue-resource 实现 get, post, jsonp请求. 2.JSONP的是实现原理: 由于浏览器的安全性限制,不允许AJAX访问 协议不同.域名不同.端口不同的数据接口,浏览器认为 ...

  3. FW/IDS/IPS/WAF等安全设备部署方式及优缺点

    现在市场上的主流网络安全产品可以分为以下几个大类:1.基础防火墙FW/NGFW类 主要是可实现基本包过滤策略的防火墙,这类是有硬件处理.软件处理等,其主要功能实现是限制对IP:port的访问.基本上的 ...

  4. SpringCloud使用Prometheus监控(基于Eureka)

    本文介绍SpringCloud使用Prometheus,基于Eureka服务发现. 1.Prometheus介绍 在之前写过两篇有关Prometheus使用的文章,如下: <SpringBoot ...

  5. Relativelayout和LinearLayout对比分析

    分析之前先了解下View的绘制流程 首先view在windows中的布局样式如下图: view绘制在windows,windows与DecoverView的交互在VIewRoot中进行. view绘制 ...

  6. BZOJ.5319.[JSOI2018]军训列队(主席树)

    LOJ BZOJ 洛谷 看错了,果然不是\(ZJOI\)..\(jry\)给\(JSOI\)出这么水的题做T3么= = 感觉说的有点乱,不要看我写的惹=-= 对于询问\(l,r,k\),设\(t=r- ...

  7. Hive+Sqoop+Mysql整合

    Hive+Sqoop+Mysql整合 在本文中,LZ随意想到了一个场景: 车,道路,监控,摄像头 即当一辆车在道路上面行驶的时候,道路上面的监控点里面的摄像头就会对车进行数据采集. 我们对采集的数据进 ...

  8. Android中ListView的简单使用

    动态添加单行列表: 首先前提是你的布局文件里有一个ListView 单行列表的添加只需要一个list集合即可,使用ArrayAdapter数组适配器绑定更新就行了 首先声明一个ArrayAdapter ...

  9. Java线程安全相关概

  10. django 源码报错

    启动django ,一直提示一个 AttributeError: 'str' object has no attribute 'decode' 哥,查了一下午google,就怕是自己判断错了,最后在一 ...