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是否打了这个不需要检查的标签。
但是这样有点绕了,不如用全局过滤器方便!

posted on   wdcwy  阅读(1374)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示