MVC之过渡器

1.过滤器

《a》:Authorization 默认实现 AuthorizeAttribute身份验证过滤器,首先运行,在其他过渡器的操作操作方法前执行;
《b》:Action 运行之前 和之后的动作方法;
《c》:Result 运行前后执行的操作结果;
《d》:Exception 如果只运行另一个过渡器,操作方法或行动结果抛出一个异常。

两种实现方式:第一种自定义类实现类AuthorizeAttribute 重写方法

public class MyAuthorization : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            //如果保留,则会运行.net framework自已定义 好的身份验证; 如果希望走自己定义的身份验证,则删除如下代码。
           // base.OnAuthorization(filterContext);

            //如果希望跳转到另外一个页面,需要使用filterContext.Result, 而不是使用filterContext.HttpContext.Response.Redirect("");因为Redirect不会使服务器停止。
          //  filterContext.HttpContext.Response.Redirect("");
           // filterContext.Result = new RedirectResult(UrlHelper.GenerateUrl("","Login","UserInfo"));

            filterContext.HttpContext.Response.Write("123");

            //路由信息
            //filterContext.RouteData

            //校验用户是否登陆

                //var routeDictionary = new System.Web.Routing.RouteValueDictionary { { "action", "Login" }, { "controller", "Account" } };

                //filterContext.Result = new RedirectToRouteResult(routeDictionary);

        }
    }

然后在控制器的方法中添加该特性如下:

 // [MyAuthorization]  //表示当前类下面的所有行为在执行前都要  执行身份验证过滤器。
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        [MyAuthorization]  //表示当前行为在执行前执行身份验证过滤器。
        public ActionResult Index()
        {
            return View();
        }
        //过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:
        protected override void OnAuthorization(AuthorizationContext filterContext)
        {
            filterContext.HttpContext.Response.Write("456");
        }
    }

该特性有 三种添加方法:1:直接在方法上添加特性,2:在控制器上添加,

3:在Global的 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);中添加如下:

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            //在全局中注册过滤器,那么所有的控制器的的所有行为都要执行该 过渡器
           // filters.Add(new MyAuthorization());
        }

//过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:

   // [MyAuthorization]  //表示当前类下面的所有行为在执行前都要  执行身份验证过滤器。
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        [MyAuthorization]  //表示当前行为在执行前执行身份验证过滤器。
        public ActionResult Index()
        {
            return View();
        }
        //过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:
        protected override void OnAuthorization(AuthorizationContext filterContext)
        {
            filterContext.HttpContext.Response.Write("456");
        }
    }

或者是新建一个控制器,添加过渡器的方法再使想应用该 过渡器的控制器 继承于该控制器:

namespace t1_Filter.Controllers
{
    public class MyBaseController : Controller
    {
        //过渡器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为:
        protected override void OnAuthorization(AuthorizationContext filterContext)
        {
            filterContext.HttpContext.Response.Write("456");
        }
    }
}
  public class HomeController : MyBaseController
时间: 2024-11-03 20:47:47

MVC之过渡器的相关文章

Spring MVC中拦截器HandlerInterceptorAdapter中的preHandle方法

拦截器:顾名思义,就是对请求进行拦截,做一些预处理.后处理或返回处理的操作 Spring MVC中使用拦截器的方法,继承HandlerInterceptorAdapter类,并根据需求实现其中的preHandle方法(预处理).postHandle方法(返回处理),afterCompletion方法(后处理). public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object han

玩转spring MVC(七)----拦截器

继续在前边的基础上来学习spring MVC中拦截器的使用,下面通过一个例子来实现(完整项目在这里下载:http://download.csdn.net/detail/u012116457/8433425). 首先在项目中添加interceptor-servlet.xml来配置拦截器,当然,必须在web.xml中配置在tomcat启动时加载,如下: <!--1.配置spring分发器(是总的控制中心 被拦截的url会汇聚到该servlet) --> <servlet> <se

spring mvc +cookie+拦截器功能 实现系统自动登陆

先看看我遇到的问题: @ResponseBody @RequestMapping("/logout") public Json logout(HttpSession session,HttpServletRequest request,HttpServletResponse response) { Json j = new Json(); if (session != null) { // session.invalidate(); session.removeAttribute(&q

[转载] Spring MVC - 处理器拦截器

5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.   5.1.1.常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 3.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间

springMVC之mvc:interceptors拦截器的用法

1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> <mvc:mapping path="/**" /> <mvc:exclude-mapping path="/static/**" /> <bean class="拦截器java代码路径" /> </mvc:

spring mvc 多拦截器

上次大概写了个可以解决velocity 多视图的东西. 但是实际运用过程中有到处找了些资料看了下.这里 小计下: DispatcherServlet解析过程: 1.HandlerMapping 用于定位具体的Controller类我习惯叫pagehandle,我认为是模块分发modelfactory eg:implement 这个是比较标准,我继承过其他的HandlerMapping 但是实际自己使用还是从接口开始更好实现 public classSpringMvcExtendHandlerMa

Spring mvc登录拦截器

自己实现的第一个Spring mvc登录拦截器 题目要求:拒绝未登录用户进入系统,只要发现用户未登录,则将用户请求转发到/login.do要求用户登录 实现步骤: 1.在spring的配置文件中添加登录拦截,如下: spring-web.xml <mvc:interceptors> <!-- 配置登陆拦截器 --> <mvc:interceptor> <mvc:mapping path="/**"/> //拦截所有请求 <mvc:e

Spring MVC 之拦截器(八)

在springMVC中实现拦截器有两种方式 1.实现HandlerInterceptor接口 2.继承HandlerInterceptorAdaptor类 编写拦截器: 1 package com.cy.springannotation.interceptor; 2 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 6 import org.apac

基于Spring MVC 实现拦截器

Spring MVC 拦截器 一,具体内容: 在所有的开发之中拦截器属于一个重要的组件,可以说几乎所有的项目都会提供的概念应用,不管是Spring MVC,还是Struts 2.x都是提供有拦截器的,利用拦截器可以实现更加方便的数据验证处理. 1,认识拦截器 所谓的拦截器指的是在用户和具体操作的Action之间做了一个屏障,以保证提交到提交到Action的数据是真实有效的数据: 如果要想实现拦截器的操作处理,那么必须掌握"org.springframework.web.servlet.Handl