ASP.Net MVC Filter验证用户登录
一、Filter是什么
ASP.NetMVC模式自带的过滤器Filter,是一种声明式编程方式,支持四种过滤器类型,各自是:Authorization(授权),Action(行为),Result(结果)和Exception(异常)。
|
过滤器类型 |
接口 |
描写叙述 |
|
Authorization |
IAuthorizationFilter |
此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法 |
|
Exception |
IExceptionFilter |
用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常 |
|
Action |
IActionFilter |
用于进入行为之前或之后的处理 |
|
Result |
IResultFilter |
用于返回结果的之前或之后的处理 |
可是默认实现它们的过滤器仅仅有三种,各自是ActionFilter(方法),Authorize(授权),HandleError(错误处理)。各种信息例如以下表所看到的:
|
过滤器 |
类名 |
实现接口 |
描写叙述 |
|
ActionFilter |
AuthorizeAttribute |
IAuthorizationFilter |
此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法 |
|
HandleError |
HandleErrorAttribute |
IExceptionFilter |
用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常 |
|
自己定义 |
ActionFilterAttribute |
IActionFilter和IResultFilter |
方法运行前/后的处理。 返回结果的之前或之后的处理。 |
第三种自己定义的过滤器,一定要继承ActionFilterAttribute。
它是ASP.NETMVCFramework提供的基类ActionFilterAttribute。这个类实现了IActionFilter和IResultFilter接口。ActionFilterAttribute有下面几个方法能够重写:
OnActionExecuting
在controller action运行之前调用
OnActionExecuted
在controller action运行之后调用
OnResultExecuting
在controller action result运行之前调用
OnResultExecuted
在controller action result运行之后调用
实现每一个页面都验证cookie中是否存实用户信息。过期用户信息就失效,跳转登录页面。
总体思路是这种:先在登录Controller中把页面传来的User信息保存到cookie中,设置cookie失效时间。每一个Controller中的方法运行都会先运行Filter。查看cookie中是否存实用户信息。
二、实践
首先要把username信息保存到cookie中。在登录的Controller中创建cookie。cookie是一种键值对模式(key, value)。
#region 将username存到cookie中
/// <summary>
/// 保存Cookie
/// </summary>
/// <returns></returns>
public void CreateCookie() //此Action自己主动往cookie里写入登录信息
{
HttpCookie UserName = new HttpCookie("name");
UserName.Value = Request["userName"];
System.Web.HttpContext.Current.Response.SetCookie(UserName);
//cookie保存时间
UserName.Expires = DateTime.Now.AddHours(10);
}
#endregion
其次,在Filter中创建自己定义的的LoginFilter,检查cookie是否实用户信息:
//类和方法都使用时,加上这个特性,此时都其作用,不加。仅仅方法起作用
[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]
public class LoginFilter:ActionFilterAttribute
{
/// <summary>
/// OnActionExecuting是Action运行前的操作
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//推断Cookieusernamepassword是否存在
HttpCookie cookieName = System.Web.HttpContext.Current.Request.Cookies.Get("name");
if ( cookieName == null)
{
filterContext.Result = new RedirectResult("/Login/Index");
}
}
}
最后,要在每一个Controller中打下自己定义的Filter的标签
<span style="font-size:18px;"> [LoginFilter]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "欢迎使用 ASP.NET MVC!"; return View();
}
</span>
在Controller上打了标签,下边的全部方法运行前都会先运行Filter,实现了过滤。可依据自己的业务。调整标签;或是使用全局的Global。
这次的Filter学习,暴露了我的一个缺点,调试bug,遇到红色波浪线就ctrl + z 撤销,而不是去认真的看问题,解决这个问题。自检!
ASP.Net MVC Filter验证用户登录的更多相关文章
- ASP.NET MVC项目演练:用户登录
ASP.NET MVC 基础入门 http://www.cnblogs.com/liunlls/p/aspnetmvc_gettingstarted.html 设置默认启动页面 public clas ...
- ASP.NET MVC下判断用户登录和授权的方法
日常开发的绝大多数系统中,都涉及到管理用户的登录和授权问题.登录功能(Authentication),针对于所有用户都开放:而授权(Authorization),则对于某种用户角色才开放. 在asp. ...
- ASP.NET MVC下判断用户登录和授权状态方法
在我们日常开发的绝大多数系统中,都涉及到管理用户的登录和授权问题.登录功能(Authentication),针对于所有用户都开放:而授权(Authorization),则对于某种用户角色才开放. 在a ...
- JavaWeb 之 Filter 验证用户登录案例
需求: 1. 访问一个网站的资源.验证其是否登录 2. 如果登录了,则直接放行. 3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录". 代码实现: import j ...
- ASP.NET MVC实现单用户登录
现在许多网站都要求登录后才能进行进一步的操作,当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线,或者禁止后面的人登录.这里实现的是前一种功能. 网上有许 ...
- asp.net mvc中的用户登录验证过滤器
在WEB项目中建立 类: public class LoginFilter : ActionFilterAttribute { public override voi ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- (MVC)验证用户是否登录 登录认证
验证类 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...
- .net MVC使用Session验证用户登录(转载)
.net MVC使用Session验证用户登录 用最简单的Session方式记录用户登录状态 1.添加DefaultController控制器,重写OnActionExecuting方法,每次访问 ...
随机推荐
- 如何更改jar包源码
首先将你要更改的源码文件在eclipse中编译成.class文件 再找到你需要更改的.jar包 在桌面右键新建个文件夹把你要改的.jar包ctrl+c和ctrl+v 准备好一个压缩工具(这里推荐234 ...
- 【基础篇】activity生命周期及数据保存
常见的Android 的界面,均采用Activity+view的形式显示的,一提到Activity,立即就能联想到Activity的生命周期与状态的保存. 下面先从Activity的生命周期开始说起 ...
- js003-4方向8方向函数
1,求四方向或者8方向的周围的棋子. /** * pos 1-4, 1-8 4/8方向的周围 * @param {*} pos * @param {*} dir */ var _nearChess = ...
- 【APP测试】APP弱网环境测试
方法一:利用抓包工具 1.利用fiddler通过代理连接上手机之后,进入Fiddler->Rules->Customize Rules,点击弹出的CustomRules.js文件,找到m_ ...
- selenium使用报错“selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.”
安装了python3,使用pip安装了selenium,但是在使用时,报了“selenium.common.exceptions.WebDriverException: Message: 'gecko ...
- 03012_预处理对象executeQuery方法(实现数据库的查询)
1.概述 (1)通过预处理对象的executeQuery方法,完成记录的select语句的执行: (2)操作格式统一如下: ①注册驱动: ②获取连接: ③获取预处理对象: ④SQL语句占位符设置实际参 ...
- CCNA Cloud CLDFND 210-451 QUIZ: Server Virtualization
Author:海峰 http://weibo.com/344736086 http://yanheven.github.io/ http://blog.csdn.net/yanheven1 1.Whi ...
- js插件---tree(多级文件)插件如何使用
js插件---tree(多级文件)插件如何使用 一.总结 一句话总结:还是一般的引入js和css后js调用的方式, 只不过tree调用的时候必须设置一个 HTML 模板(就是调用的那段html代码,别 ...
- es6 --- var const let
var const let 区别 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1. const ...
- 竖向 两级手风琴 TAB 栏
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...