ASP.NET MVC 提供Filters(筛选器)之前或之后调用操作方法执行筛选逻辑,和AOP面向切面编程一样。


本文已经同步到《Asp.net Vnext 系列教程 》中]

本章主要介绍AuthorizeAttribute
Authorize 属性,可以对控制器操做的声明性的授权检查。 现。
实例代码

启动类
 services.ConfigureAuthorization(options =>
{
//添加策略
options.AddPolicy("Api-Manager", policy =>
{ //添加认证方案的名字
policy.ActiveAuthenticationSchemes.Add("Api");
//创建认证策略Claim
policy.RequireClaim("Permission", "CanViewPage");
}); });
  public void Configure(IApplicationBuilder app)
{ app.UseMiddleware<AuthorizeBasicMiddleware>("Api");
//添加中间件 }

中间件

 public class AuthorizeBasicMiddleware : AuthenticationMiddleware<BasicOptions>
{
public AuthorizeBasicMiddleware( RequestDelegate next, IOptions<BasicOptions> options, string authScheme) :
//这里必需是"Api"
base(next, options, new ConfigureOptions<BasicOptions>(o => o.AuthenticationScheme = authScheme) { Name = authScheme })
{
} protected override AuthenticationHandler<BasicOptions> CreateHandler()
{
//new 一个认证处理
return new BasicAuthenticationHandler();
}
}

认证处理类

  public class BasicAuthenticationHandler : AuthenticationHandler<BasicOptions>
{
protected override void ApplyResponseChallenge()
{ //验证失败进行跳转
// this.Response.Redirect("http://baidu.com"); } protected override void ApplyResponseGrant()
{
//验证失败清除Cookies
//this.Response.Cookies.Delete("11"); } protected override AuthenticationTicket AuthenticateCore()
{
var principal = new ClaimsPrincipal();
//添加Claim
principal.AddIdentity(new ClaimsIdentity(
new Claim[] {
new Claim("Permission", "CanViewPage"), },
Options.AuthenticationScheme));
//返回一个票据
return new AuthenticationTicket(principal, new AuthenticationProperties(), Options.AuthenticationScheme);
}
}

控制器

   public class AuthorizeUserController : Controller
{
//策略名表示应用的策略
[Authorize("Api-Manager")]
public string ApiManagers()
{
return "Hello World!";
}

这个时候我们修改一认证处理类
  public class BasicAuthenticationHandler : AuthenticationHandler<BasicOptions>
{
protected override void ApplyResponseChallenge()
{ //验证失败进行跳转
this.Response.Redirect("http://baidu.com"); } protected override void ApplyResponseGrant()
{
//验证失败清除Cookies
//this.Response.Cookies.Delete("11"); } protected override AuthenticationTicket AuthenticateCore()
{
var principal = new ClaimsPrincipal();
//添加Claim
principal.AddIdentity(new ClaimsIdentity(
new Claim[] {
new Claim("Permission", "CanViewPage1"), },
Options.AuthenticationScheme));
//返回一个票据
return new AuthenticationTicket(principal, new AuthenticationProperties(), Options.AuthenticationScheme);
}
}

在认证处理类没有找到相同的Claim,导致认证失败,跳转百度。

简单介绍过滤器,估计大家都会
IExceptionFilter 异常过滤器
IActionFilter 动作过滤器
IResultFilter 结果过滤器
AuthorizationFilterAttribute 认证过滤器
启动类中注册全局过滤器
  services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new GlobalExceptionFilter());
options.Filters.Add(new GlobalActionFilter());
options.Filters.Add(new GlobalResultFilter());
options.Filters.Add(new GlobalAuthorizationFilter()); });

Asp.net vnext 文档
http://mvc.readthedocs.org/en/latest/index.html
 

Asp.net Vnext Filters的更多相关文章

  1. [转载]Getting Started with ASP.NET vNext and Visual Studio 14

    说在转载之前的话:ASP.NET框架之前不断做大,而vNext则是从头开始,对ASP.NET框架进行拆分并瘦身,面对不同的需求而更加灵活,各个拆分出来的模块更加轻量.vNext的出现,对ASP.NET ...

  2. POCO Controller 你这么厉害,ASP.NET vNext 知道吗?

    写在前面 阅读目录: POCO 是什么? 为什么会有 POJO? POJO 的意义 POJO 与 PO.VO 的区别 POJO 的扩展 POCO VS DTO Controller 是什么? 关于 P ...

  3. 兼容Mono的下一代云环境Web开发框架ASP.NET vNext

    微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架ASP.NET vNext的预览.此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软“云优先”(cl ...

  4. 在Linux上运行ASP.NET vNext

    最新的ASP.NET vNext完全开源且可以跨多个平台运行,在Windows环境下我尝试了下,几乎没花什么工夫就跑起了Sample,而在Linux环境下则要多花了不少时间,所以特别记录下整个过程,希 ...

  5. 让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。

    写在前面 阅读目录: 娓娓道来 Install ASP.NET vNext Command Line Tools 安装 Homebrew 使用 Homebrew,安装 KVM Install Subl ...

  6. Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建

    最新的asp.net vnext已经可以支持在mac上运行了,当然用的是mono.相比linux来说,mac的安装略显繁琐.对于大部分用Windows开发asp.net的程序员来说,初次配置还是很费时 ...

  7. 分享我对 ASP.NET vNext 的一些感受,也许多年回过头看 So Easy!

    写在前面 阅读目录: Visual Studio "14" CTP 关于 ASP.NET vNext ASP.NET vNext 实践 后记 ASP.NET vNext 发布已经过 ...

  8. 开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、简单吞吐量压力测试

    继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-ho ...

  9. 开发 ASP.NET vNext 初步总结(使用Visual Studio 14 CTP1)

    新特性: vNext又称MVC 6.0,不再需要依赖System.Web,占用的内存大大减少(从前无论是多么简单的一个请求,System.Web本身就要占用31KB内存). 可以self-host模式 ...

随机推荐

  1. 离线下载Windows 调试符号 Symbols

    公司开发机没有不能连接到互联网.调试程序时那些Windows模块(如ntdll.dll)不能加载符号,而程序总是崩在这些模块里.想看一眼到底崩在了什么地方. 需要把对应的符号下载下来. 使用工具sym ...

  2. JS实现图片跟随鼠标移动

    在实现这个特效之前,需要了解JS中一个对象,event(事件对象),对,只需了解这一个对象.它的方法属性我不多说了,想详细了解的童鞋点击这里. 我们用到的只有这个对象的两个属性,clientX与cli ...

  3. less 初试

    第一次接触less,做些记录. 官网     民间中文文档      less notepad++插件 1. 支持变量声明 支持颜色.大小等相加 @nice-blue: #5B83AD; @light ...

  4. Java基础之集合框架——使用集合Vector<>挑选演员(TryVector)

    控制台程序. public class Person implements Comparable<Person> { // Constructor public Person(String ...

  5. MVC3 FAQ

    1. html helper 可以缩写代码的,下面2段代码是相同效果 @Html.DropDownList("TourList") <select name="aa ...

  6. 遇到could not find developer disk image 问题怎么解决

    一般是设备的版本低于或者高于当前的xcode

  7. 转:Apache POI Tutorial

    Welcome to Apache POI Tutorial. Sometimes we need to read data from Microsoft Excel Files or we need ...

  8. poj 算法 分类

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 最近AC题:2528   更新时间:2011.09.22  ...

  9. struts几个配置文件加载顺序_2015.01.04

    struts几个配置文件加载顺序: 01:struts-default.xml 02:struts-plugin.xml 03:struts.xml 04:struts.properties 05:w ...

  10. Android Handler简单使用

    package com.example.myhandlertest3; import android.os.Bundle; import android.os.Handler; import andr ...