当前位置: 代码迷 >> VC/MFC >> (MVC)验证用户是不是登录
  详细解决方案

(MVC)验证用户是不是登录

热度:128   发布时间:2016-05-02 03:41:25.0
(MVC)验证用户是否登录
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace CommonHelper{    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]    public class AuthorizationAttribute    {        private String _AuthUrl = String.Empty;        /// <summary>        /// 获取或者设置一个值,改值表示登录地址        /// 如果web.config中未定义AuthUrl的值,则默认为login        /// </summary>        public String AuthUrl        {            get { return _AuthUrl; }            set            {                if (String.IsNullOrEmpty(value))                    throw new ArgumentNullException("用于验证用户登录信息的登录地址不能为空");                else                    _AuthUrl = value.Trim();            }        }        private String _AuthSaveKey = String.Empty;        /// <summary>        /// 获取或者设置一个值,改值表示登录用来保存登录信息的键名        /// 如果web.config中未定义AuthSaveKey的值,则默认为LoginedUser        /// </summary>        public String AuthSaveKey        {            get { return _AuthSaveKey; }            set {                if (String.IsNullOrEmpty(value))                    throw new ArgumentNullException("用于保存登录信息的键名不能为空");                else                    this._AuthSaveKey = value.Trim();            }        }        private String _AuthSaveType = String.Empty;        /// <summary>        /// 获取或者设置一个值,该值表示用来保存登录信息的方式        /// </summary>        public String AuthSaveType {            get { return _AuthSaveType; }            set {                if (String.IsNullOrEmpty(value))                    throw new ArgumentNullException("用于保存登录信息的方式不能为空,只能为【cookie】或者【session】");                else                    this._AuthSaveType = value.Trim();            }        }        /// <summary>        /// 默认构造函数        /// </summary>        public AuthorizationAttribute()        {             String authUrl=System.Configuration.ConfigurationManager.AppSettings["AuthUrl"];            String saveKey = System.Configuration.ConfigurationManager.AppSettings["AuthSaveKey"];            String saceType = System.Configuration.ConfigurationManager.AppSettings["AuthSaveType"];            if (String.IsNullOrEmpty(authUrl))                this._AuthUrl = "/User/Login";            else                this._AuthUrl = authUrl;            if (String.IsNullOrEmpty(saveKey))                this._AuthSaveKey = "LoginedUser";            else                this._AuthSaveKey = saveKey;            if (String.IsNullOrEmpty(saceType))                this._AuthSaveType = "Session";            else                this._AuthSaveType = saceType;        }        /// <summary>        /// 构造函数重载        /// </summary>        /// <param name="authUrl">表示没有登录跳转的登录地址</param>        public AuthorizationAttribute(String authUrl)            : this()        {            this._AuthUrl = authUrl;        }        /// <summary>        /// 构造函数重载        /// </summary>        /// <param name="authUrl">表示没有登录跳转的登录地址</param>        /// <param name="saveKey">表示登录用来保存登录信息的键名</param>        public AuthorizationAttribute(String authUrl, String saveKey)            : this(authUrl)        {            this._AuthSaveKey = saveKey;            this._AuthSaveType = "Session";        }        /// <summary>        /// 构造函数重载        /// </summary>        /// <param name="authUrl">表示没有登录跳转的登录地址</param>        /// <param name="saveKey">表示登录用来保存登录信息的键名</param>        /// <param name="saveType">表示登录用来保存登录信息的方式</param>        public AuthorizationAttribute(String authUrl, String saveKey, String saveType)            : this(authUrl, saveKey)        {            this._AuthSaveType = saveType;        }        /// <summary>        /// 处理用户登录        /// </summary>        /// <param name="fileterContext"></param>        public void OnAuthorization(AuthorizationContext fileterContext)        {            if (fileterContext.HttpContext == null)                throw new Exception("次特性只适合于Web应用程序使用!");            else {                switch (AuthSaveType)                {                     case "Session":                        if (fileterContext.HttpContext.Session == null)                            throw new Exception("服务器Session不可用!");                        else if (!fileterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true) && !fileterContext.ActionDescription.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true))                        {                            if (fileterContext.HttpContext.Session[_AuthSaveKey] == null)                                fileterContext.Result = new RedirectResult(_AuthUrl);                        }                        break;                    case "Cookie":                        if (!fileterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true) && !fileterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true))                        {                            if (fileterContext.HttpContext.Request.Cookies[_AuthSaveKey] == null)                                fileterContext.Result = new RedirectResult(_AuthUrl);                        }                        break;                    default:                        throw new ArgumentNullException("用于保存登录信息的方式不能为空,只能为【Cookie】或者【Session】");                }            }        }    }}

 

1楼狂风戏雪
现在做登录,不是用“票据”验证类么?
Re: 夕边日落
@狂风戏雪,怎么说呢,个人喜好,可用这个也可用你说的那个“票据”
  相关解决方案