MVC中使用AuthorizeAttribute做身份验证操作

代码顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest

 


如果AuthorizeCore返回false时,才会走HandleUnauthorizedRequest 方法,并且Request.StausCode会返回401,401错误又对应了Web.config中

<authentication mode="Forms">
      <forms loginUrl="~/" timeout="2880" />
    </authentication>

所有,AuthorizeCore==false 时,会跳转到 web.config 中定义的  loginUrl="~/"

 

 public class CheckLoginAttribute : AuthorizeAttribute
    {

        protected override bool AuthorizeCore(HttpContextBase httpContext)        {
            bool Pass = false;
            if (!CheckLogin.AdminLoginCheck())
            {
                httpContext.Response.StatusCode = 401;//无权限状态码
                Pass = false;
            }
            else
            {
                Pass = true;
            }

            return Pass;
        }

      

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {


            if(filterContext.HttpContext.Request.IsAjaxRequest())
            {
                if (!App.AppService.IsLogon)
                {

                    filterContext.Result = new JsonResult
                                               {
                                                   Data = new {IsSuccess = false, Message = "不好意思,登录超时,请重新登录再操作!"},
                                                   JsonRequestBehavior = JsonRequestBehavior.AllowGet
                                               };
                    return;
                }
            }
            if (App.AppService.IsLogon)
            {
                return;
            }

            base.HandleUnauthorizedRequest(filterContext);
            if (filterContext.HttpContext.Response.StatusCode == 401)
            {
                filterContext.Result = new RedirectResult("/");
            }
        }
      

     
    }

 

 

 


 

 

AuthorizeAttribute的OnAuthorization方法内部调用了AuthorizeCore方法,这个方法是实现验证和授权逻辑的地方,如果这个方法返回true,


   表示授权成功,如果返回false, 表示授权失败, 会给上下文设置一个HttpUnauthorizedResult,这个ActionResult执行的结果是向浏览器返回


   一个401状态码(未授权),但是返回状态码没什么意思,通常是跳转到一个登录页面,可以重写AuthorizeAttribute的

   HandleUnauthorizedRequest
protected override void HandleUnauthorizedRequest(AuthorizationContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("filterContext");
            }
            else
            {
                string path = context.HttpContext.Request.Path;
                string strUrl = "/Account/LogOn?returnUrl={0}";
               
                context.HttpContext.Response.Redirect(string.Format(strUrl, HttpUtility.UrlEncode(path)), true);
               
            }
           
        }

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 .NET Framework 4 使用 Swagger 实现身份验证需要进行以下步骤: 1. 首先需要在 Global.asax.cs 文件注册 Web API 路由,同时在 WebApiConfig.cs 文件启用身份验证: ```csharp public static void Register(HttpConfiguration config) { // 注册 Web API 路由 config.MapHttpAttributeRoutes(); // 启用身份验证 config.Filters.Add(new AuthorizeAttribute()); } ``` 2. 在 SwaggerConfig.cs 文件配置身份验证信息: ```csharp public static void Register() { var thisAssembly = typeof(SwaggerConfig).Assembly; GlobalConfiguration.Configuration .EnableSwagger(c => { // 配置 Swagger UI ... // 添加身份验证信息 c.ApiKey("apiKey") .Description("API Key Authentication") .Name("apiKey") .In("header"); c.OperationFilter<ApiKeyOperationFilter>(); }) .EnableSwaggerUi(c => { // 配置 Swagger UI ... }); } ``` 3. 创建 ApiKeyOperationFilter 类并实现 IOperationFilter 接口,用于在 Swagger UI 添加身份验证信息: ```csharp public class ApiKeyOperationFilter : IOperationFilter { public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) { var apiKey = new ApiKeyScheme { Description = "API Key Authentication", In = "header", Name = "apiKey", Type = "apiKey" }; operation.parameters.Add(apiKey); } } ``` 完成上述步骤后,Swagger UI 将会在每个请求添加身份验证信息,以确保请求被正确处理。在 Swagger UI 的右上角,点击“Authorize”按钮,在弹出的窗口输入身份验证信息,然后点击“Authorize”按钮进行身份验证

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值