zoukankan      html  css  js  c++  java
  • LSJ_NHibernate第四章 MVC

    前言:

      MVC现在已经成为web开发的一个主流趋势了,还没用过的小伙伴,你们已经落伍了,这里我推荐一篇学习博客 玩转Asp.net MVC 的八个扩展点  代码完全开源,下载地址:https://git.oschina.net/tibos/LSJ_NHibernate

    Global 全局应用程序处理的入口,在这个里面可以干很多事,比如把一些公共的东西绑定进去,这里不知不觉就用到一个知识,面向切面编程AOP

    最常用的,我们把验证用户身份,记录用户操作信息....这些记为横切关注点,我们进行每个操作的时候都要验证用户凭证是否失效,干了些什么事,如果每个请求都写,代码就冗余了,也不便于后期的维护,我们提取成横切关注点后,只用写一遍代码就能轻松实现了.

    为此,MVC给我们提供了很好的拓展,我们重新ActionFilterAttribute里面的方法即可

    我们重写这4个方法即可

    1         // OnActionExecuted 在执行操作方法后由 ASP.NET MVC 框架调用。
    2         // OnActionExecuting 在执行操作方法之前由 ASP.NET MVC 框架调用。
    3         // OnResultExecuted 在执行操作结果后由 ASP.NET MVC 框架调用。
    4         // OnResultExecuting 在执行操作结果之前由 ASP.NET MVC 框架调用。

    用Log4net记录这些请求

    顺便也可以记录到数据库,做操作日志

    保存用户凭证我用的是forms表单验证,MVC默认是支持的,设置起来也非常简单

    1     <authentication mode="Forms">
    2       <forms loginUrl="~/Home/Login" timeout="2880" />
    3     </authentication>
    4     <authorization>
    5       <deny users="?" />
    6     </authorization>

    设置成没有登入的用户不能访问,在Global将事件注册到mvc

     1 public MvcApplication()
     2         {
     3             AuthorizeRequest += new EventHandler(MvcApplication_AuthorizeRequest);
     4         }
     5 
     6         void MvcApplication_AuthorizeRequest(object sender, EventArgs e)
     7         {
     8             IIdentity id = Context.User.Identity;
     9             if (id.IsAuthenticated)
    10             {
    11 
    12                 var roles = new DAO.BLL.B_Manager().GetRoles(id.Name);
    13                 Context.User = new GenericPrincipal(id, roles);
    14             }
    15         }

    这样进行所有的操作,forms都会验证用户是否登录,再结合OnActionExecuting进行权限验证,没有权限的就直接返回一个空视图即可!

    用forms保存凭证的要注意一点,对于没有登录的用户,项目下的所有资源都无法访问,如js,img....所以这里必须将不需要验证的文件开放访问权限,在配置文件里设置,如下

    1  <!--这些资源是不用权限判断的-->
    2   <location path="img">
    3     <system.web>
    4       <authorization>
    5         <allow users="*" />
    6       </authorization>
    7     </system.web>
    8   </location>

     最后一个需要捕获的就是错误日志,重写HandleErrorAttribute方法即可

     1     /// <summary>
     2     /// 捕获程序出错日志
     3     /// </summary>
     4     public class Log4NetExceptionFilter : HandleErrorAttribute
     5     {
     6 
     7         public override void OnException(ExceptionContext filterContext)
     8         {
     9             string message = string.Format("消息类型:{0}<br>消息内容:{1}<br>引发异常的方法:{2}<br>引发异常源:{3}"
    10                   , filterContext.Exception.GetType().Name
    11                   , filterContext.Exception.Message
    12                    , filterContext.Exception.TargetSite
    13                    , filterContext.Exception.Source + filterContext.Exception.StackTrace
    14                    );
    15 
    16             //记录日志
    17             CZLogger.Logger.Error(message);
    18 
    19             //抛出异常信息
    20             filterContext.Controller.TempData["ExceptionAttributeMessages"] = message;
    21 
    22             //转向
    23             filterContext.ExceptionHandled = true;
    24             filterContext.Result = new RedirectResult("/Home/Error/");
    25         }
    26     }

    将记录错误日志方法写入RegisterGlobalFilters即可.

  • 相关阅读:
    PHP运行及语句及逻辑
    数据库基础,表及SQL语句
    php后台修改人员表信息
    php后台增加删除修改跳转页面
    用PHP访问数据库
    php登录注册页面及加载
    php做登录注册页面及加载
    实现基于物理的渲染
    Tile-Based Deferred Rendering
    矩阵基础 2
  • 原文地址:https://www.cnblogs.com/tibos/p/6203052.html
Copyright © 2011-2022 走看看