Asp.net Vnext Filters
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的更多相关文章
- [转载]Getting Started with ASP.NET vNext and Visual Studio 14
说在转载之前的话:ASP.NET框架之前不断做大,而vNext则是从头开始,对ASP.NET框架进行拆分并瘦身,面对不同的需求而更加灵活,各个拆分出来的模块更加轻量.vNext的出现,对ASP.NET ...
- POCO Controller 你这么厉害,ASP.NET vNext 知道吗?
写在前面 阅读目录: POCO 是什么? 为什么会有 POJO? POJO 的意义 POJO 与 PO.VO 的区别 POJO 的扩展 POCO VS DTO Controller 是什么? 关于 P ...
- 兼容Mono的下一代云环境Web开发框架ASP.NET vNext
微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架ASP.NET vNext的预览.此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软“云优先”(cl ...
- 在Linux上运行ASP.NET vNext
最新的ASP.NET vNext完全开源且可以跨多个平台运行,在Windows环境下我尝试了下,几乎没花什么工夫就跑起了Sample,而在Linux环境下则要多花了不少时间,所以特别记录下整个过程,希 ...
- 让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。
写在前面 阅读目录: 娓娓道来 Install ASP.NET vNext Command Line Tools 安装 Homebrew 使用 Homebrew,安装 KVM Install Subl ...
- Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建
最新的asp.net vnext已经可以支持在mac上运行了,当然用的是mono.相比linux来说,mac的安装略显繁琐.对于大部分用Windows开发asp.net的程序员来说,初次配置还是很费时 ...
- 分享我对 ASP.NET vNext 的一些感受,也许多年回过头看 So Easy!
写在前面 阅读目录: Visual Studio "14" CTP 关于 ASP.NET vNext ASP.NET vNext 实践 后记 ASP.NET vNext 发布已经过 ...
- 开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、简单吞吐量压力测试
继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-ho ...
- 开发 ASP.NET vNext 初步总结(使用Visual Studio 14 CTP1)
新特性: vNext又称MVC 6.0,不再需要依赖System.Web,占用的内存大大减少(从前无论是多么简单的一个请求,System.Web本身就要占用31KB内存). 可以self-host模式 ...
随机推荐
- jQuery中的siblings
所谓siblings,英文翻译就是兄弟节点.那么故名思意,就是拿到某元素的兄弟节点(不包括自己). <html> <head> <script type="te ...
- NET4.5之初识async与await
这是两个关键字,用于异步编程.我们传统的异步编程方式一般是Thread.ThreadPool.BeginXXX.EndXXX等等.把调用.回调分开来,代码的逻辑是有跳跃的,于是会导致思路不是很清晰的问 ...
- resin 64 & Java install
[root@vohst voh]# uname -rnvohst 3.10.0-123.el7.x86_64 resin-pro-4.0.41.tar.gz Unrecognized option: ...
- CSS之CSS hack
由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系.我们就可以根据这个来针对不同的浏览器来写不同的CSS. CSS Hack大致有3种表现形式,CSS类内部Hack.选择器H ...
- tomcat war包部署
平常的开发我们都是通过IDE进行项目的部署,但有时候我们不得不进行手工部署(例如在Server上). 手工部署分为以下几步: 第1步: 用maven打war包 (假如得到的war包名为: appkit ...
- zabbix监控linux文件的一个目录大小
监控linux文件的一个目录大小 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:高级运维工程师之路 598432640 我们知道,Linux自带的一些监控模板 ...
- int 与 Integer--话说数组转集合
话说是自从JDK5后,而这就可以自动进行类型转换了. 当然,区别还是有的,就是对象和“非对象”什么的.可是,今天进行一个测试,出了一个小问题,现将代码贴下: 代码0:先来一个正常点的,用String进 ...
- [原创]java WEB学习笔记50:文件上传案例
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- java基础(59):Eclipse把自动括号匹配改成C++那样的(强迫症,没办法)
在Eclipse开发环境下依次选择: 1.Windows->Preferences->Java->Code Style->Formatter: 2.在Active Profil ...
- springday05-go1
新建web工程spring-netcross1.导入spring文件夹里的七个jar包,另外还要导入jdbc-lib的四个jar包,ojdbc.jar,commoms-pool,commons-dbc ...