zoukankan      html  css  js  c++  java
  • Mvc全局过滤器与Action排除

    转自http://blog.csdn.net/shuaihj/article/details/53020428

    如何一次性给所有action做登录验证过滤,如何排除不需要做登录验证的action? 
    1. 如何让某个Action未登录就不能执行? 
    先封装一个判断是否登录的函数。 
     
    目标Action中调用这个函数,如果未登录,跳转登录Action 
     
    2. 如果Controller中有很多Action都要处理怎么办? 
    可以自定义一个过滤器 
     
    给每个需要做登录检查的action打上这个标签 
     
    3. 这样还是麻烦,每个Action都要打标签吗? 
    也可以给Controller这个层级打标签,对内部所有Action都有效 
     
    4. 如果项目中有很多Controller,每个都要打一遍吗? 
    有两个方法: 
    4.1.声明一个BaseController:Controller,在这个基类上打标签 
     
    让需要做登录验证的Controller都继承自BaseController 
     
    4.2使用全局过滤器 
     
    应用启动的时候注册全局过滤器,会对所有Controller的Action起作用 
     
    5. 可是我的首页和登录Action是不需要做过滤的,怎么排除? 
    修改过滤器,增加一个是否需要检查的属性 
     
    只给不需要做检查的Action或者Controller打上不需要做检查的标签即可 
     
    全局过滤器注册的时候,要注册为需要检查 
     
    6. 回头审视一下我们的基类BaseController 
    继承自Controller类,它本身已经继承了IActionFilter接口,我们只要override这个接口的方法,就可以了。所有继承自这个基类的Controller就都可以做登录验证了,基类也不需要打标签了,相当于把过滤器的业务逻辑,转移到这个方法中: 
     
    在子类中控制是否需要做登录检查 
     
    这个方法的问题是:没有办法对子类的Action单独控制是否做检查。 
    非要做也可以,那就要再定义一个标签Atrribute,来标识不需要检查,在BaseController父类中通过反射检查action是否打了这个不需要检查的标签。 
    但是这样有点绕了,不如用全局过滤器方便!

  • 相关阅读:
    [视频监控]用状态机图展示Layout切换关系
    初次打开mysql5.6后
    eclipse 项目乱码
    java servlet 中遇到的编码问题
    解决HttpServletResponse输出的中文乱码问题
    The first day of my Blog
    最大子段和
    LOI 54 成立一周年纪(zuo)念(si)
    水题 逆序对 NOIP 2013 火柴排队
    搜索 由浅入深 之一 水题
  • 原文地址:https://www.cnblogs.com/sanday/p/9412845.html
Copyright © 2011-2022 走看看