过滤器其实就是.net中的特性,在.net.35之后我们可以在类或者方法名称上面加某种特性,而在.net mvc环境下,有几个比较重要的特性,如AuthorizeAttribute
它主要有在权限验证上,有时我们习惯叫它“过滤器”,原因是它可以把不符合要求的用户过滤掉,呵呵,下面是系统中常见的用户权限过滤器的代码,供大家学习
1 namespace Web.Attributes
2 {
3
4 /// <summary>
5 /// 用户验证列举
6 /// </summary>
7 public enum AuthenticationType
8 {
9 /// <summary>
10 /// 登录
11 /// </summary>
12 Login,
13 /// <summary>
14 /// 后台登陆
15 /// </summary>
16 BackgroundLogin,
17 /// <summary>
18 /// 注册
19 /// </summary>
20 Register,
21 }
22
23 /// <summary>
24 /// 用户验证过滤器:前台
25 /// </summary>
26 public class UserAuthentication : AuthorizeAttribute
27 {
28 public AuthenticationType Authentication { get; set; }
29 /// <summary>
30 /// 构造函数
31 /// </summary>
32 public UserAuthentication()
33 : this(AuthenticationType.Login) { }
34 public UserAuthentication(AuthenticationType authentication)
35 {
36 this.Authentication = authentication;
37 }
38 /// <summary>
39 /// 执行前验证
40 /// </summary>
41 public override void OnAuthorization(AuthorizationContext filterContext)
42 {
43
44 //验证不成功的时候
45 switch (this.Authentication)
46 {
47 case AuthenticationType.Login:
48 if (!ClientHelper.Current.HasUserInfo)
49 filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary { { "Action", "LogOn" }, { "Controller", "Account" }, { "returnUrl", HttpContext.Current.Request.Url.ToString() } });
50 break;
51
52 case AuthenticationType.BackgroundLogin:
53 if (string.IsNullOrEmpty(SessionAction.ReadSession("Background_Current_UserID")) || Convert.ToInt32(SessionAction.ReadSession("Background_Current_UserID")) < 0)
54 filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary { { "Action", "LogOn" }, { "Controller", "Account" }, { "returnUrl", HttpContext.Current.Request.Url.ToString() } });
55 break;
56 case AuthenticationType.Register:
57 filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary { { "Action", "Register" }, { "Controller", "Account" } });
58 break;
59 default:
60 filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary { { "Action", "Index" }, { "Controller", "Home" } });
61 break;
62 }
63
64 }
65 }
66 }