小菜成长史开篇

来源:互联网 发布:死人不会说话 知乎 编辑:程序博客网 时间:2024/04/28 08:55

    刚刚走上职场的小菜内心忐忑不已,这不大boss就给分配任务了。

    Boss:小菜啊,咱们公司的一款系统需要重构一下,关于权限方面的知识去研究一下。老板相信你能做好这件事,去做吧!

    小菜:(欲哭无泪状)好的,老板!定当不辜负您的期望!

    走出办公室的小菜:呜呜呜,权限是什么啊?怎么办?怎么办?我要努力,还是先把项目下下来看看吧!哦,用的是EasyUI+MVC框架,之前用过(心中窃喜)上手应该不难。哈哈哈!

    接下来一周的小菜:上班补之前的知识,下班赶紧各种刷。

    一周后:小菜,Boss让你去他办公室。

    小菜:我干什么了吗?我怎么了?不会要辞退我吧!啊啊啊,老板交给我的任务没整,苍天啊,我干了什么??

    Boss办公室:小菜啊,研究的怎么样了?还有多长时间可以完成?

    小菜:老板,我看了看咱们的项目,这方面的内容应该容易实现,您再给我3天时间,保证给您一个完美答复。

    Boss:好。

    小菜:我们这个项目的权限知识不是很多啊,没有什么思路,我让大鸟帮我看看。

    叮铃铃,叮铃铃!大鸟:小菜啊,咋啦?

    小菜:我们boss给我了任务,我把项目给你发过去,你给我参谋参谋要加点什么。

    大鸟:好吧。可得请我吃大餐。

    小菜:NoProblem!

    2个小时之后:大鸟:小菜,我看了,你们这个项目没有必要加权限的知识,我发现你们这个项目的一个大bug,你们这个项目没有设置拦截器啊,没有登录的用户也可以看到你们的页面,这可得改改。

    小菜:哦,那我研究研究拦截器怎么用。

    苦逼的小菜下班之后还在公司加班。终于,在公司另外一个大鸟的帮助下,拦截器的功能实现了。session功能和 cookie功能都能实现。下面让小菜娓娓道来。

Session方法:

 //类和方法都使用时,加上这个特性,此时都其作用,不加,只方法起作用      [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]      public class FilterAttribute : ActionFilterAttribute    {        public String Message { get; set; }        public override void OnActionExecuting(ActionExecutingContext filterContext)        {            base.OnActionExecuting(filterContext);//在调用方法之前进行的操作            //判断session,为空则返回登录界面            if (System.Web.HttpContext.Current.Session["userid"] == null)            {                //在响应前返回到登录界面                System.Web.HttpContext.Current.Response.Write("<script language=javascript>window.top.location.href='/Login/index'</script>");            }

    然后在每个controler页面加上这个过滤器。

cookie方法

    之前是用session存储的信息,现在用cookies来存储,在logincontroler中存储用户信息。

//添加用户信息到cookies
 HttpCookie userName = new HttpCookie("userid"); userName.Value = list[0].Userid; HttpCookie passWord = new HttpCookie("pwd"); passWord.Value = list[0].Pwd; System.Web.HttpContext.Current.Response.SetCookie(userName); System.Web.HttpContext.Current.Response.SetCookie(passWord); userName.Expires = DateTime.Now.AddHours(10);//定义存储在cookies中的时间 passWord.Expires = DateTime.Now.AddHours(10);

    自定义的拦截器。
[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]      public class FilterAttribute : ActionFilterAttribute    {        public string  Message { get; set; }        public override void OnActionExecuting(ActionExecutingContext filterContext)        {            base.OnActionExecuting(filterContext);//在调用方法之前进行的操作//判断Cookie用户名密码是否存在              HttpCookie userid = System.Web.HttpContext.Current.Request.Cookies.Get("userid");            HttpCookie pwd = System.Web.HttpContext.Current.Request.Cookies.Get("pwd");              if (userid == null || pwd == null)            {               filterContext.Result = new RedirectResult("/Login/Index");            } 
这样还是得在每个controler中加上一个标签。

    但是又觉得这样很麻烦,那么能不能设置一个全局过滤器这样就不用在每个controler前面都写上这个过滤器了。详情请看下一篇博客。



原创粉丝点击