5.WebAPI的Filter

简介: 1.WebApi的Filter介绍:大家知道什么是AOP(aspect oriented programming)吗?它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。

1.WebApi的Filter介绍:

大家知道什么是AOP(aspect oriented programming)吗?它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。它是一种新的方法论,它是对传统OOP(object oriented programming)编程的一种补充。OOP是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系;AOP是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可。AOP是使用切面(aspect)将横切关注点模块化,OOP是使用类将状态和行为模块化。在OOP的世界中,程序都是通过类和接口组织的,使用它们实现程序的核心业务逻辑是十分合适。但是对于实现横切关注点(跨越应用程序多个模块的功能需求)则十分吃力,比如日志记录,权限验证,异常拦截等。而Filter恰好体现的AOP思想(也可以说是一夫当关万夫莫开了)。

2.Filter的功能主要有:

(1)验证用户是否登录,如果用户没有登录,系统直接跳转到登录页面。

(2)权限控制。

(3)记录日志。

(4)异常处理。

3.Filer权限控制实现:

项目结构如图

 (1)创建一个webapi项目并添加控制器

public class LoginController : ApiController
    {
        [HttpGet]
        public string ToLogin(string username)
        {
            return username+",你好登录成功!";
        }
    }
View Code

(2)添加MyAuthorFilter类

public class MyAuthorFilter : IAuthorizationFilter
    {
        public bool AllowMultiple
        {
            //get { throw new NotImplementedException(); }
            get { return true; }
        }
        public async Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
        {
            IEnumerable<string> values;
            if (actionContext.Request.Headers.TryGetValues("UserName", out values))
            {
                string userName = values.FirstOrDefault();
                if (userName != "ych")
                {
                    return new
                HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
                }
            }
            else
            {
                return new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
            }
            return await continuation();
        }


    }
View Code

(3)设置路由保证被注册

public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            config.Filters.Add(new MyAuthorFilter());
        }
View Code

请求结果:

4.Filer异常处理实现:

项目结构如图

 (1)创建一个webapi项目并添加控制器

public class LoginController : ApiController
    {
        [HttpGet]
        public string ToLogin(string username)
        {
            throw new Exception("抛异常," + username);
        }
    }
View Code

(2)添加MyExceptionFilter类

public class MyExceptionFilter : IExceptionFilter
    {
        //public bool AllowMultiple=>true;
        public bool AllowMultiple
        {
            get { return true; }
        }
        public async Task ExecuteExceptionFilterAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)
        {
            Exception ex = actionExecutedContext.Exception;
        }
    }
View Code

(3)设置路由保证被注册

public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            config.Filters.Add(new MyExceptionFilter());
        }
View Code

(4)用postman请求(http://localhost:43417/api/Login/tologin?username=qq)如图

这样就讲完了,你可以自己将异常什么的记录日志哦,活学活用才是硬道理!

目录
相关文章
|
3月前
javaWeb过滤器Filter(二)
javaWeb过滤器Filter(二)
|
3月前
javaWeb过滤器Filter(一)
javaWeb过滤器Filter(一)
|
8月前
|
XML 缓存 Java
JavaWeb-Filter过滤器
Filter过滤器 1. Filter的生命周期 2.Filter的配置 3.拦截路径 4.拦截具体的使用 5.拦截方式配置(资源被访问方式) 6.FilterChain拦截链
49 0
|
设计模式 监控 前端开发
【JavaWeb】Filter过滤器到底是什么
【JavaWeb】Filter过滤器到底是什么
【JavaWeb】Filter过滤器到底是什么
|
Java 数据安全/隐私保护
详解JavaWeb过滤器 Filter
1.过滤器概述 过滤器,顾名思义就是对事物进行过滤的,在Web中的过滤器,当然就是对请求进行过滤,我们使用过滤器,就可以对请求进行拦截,然后做相应的处理,实现许多特殊功能。如登录控制,权限管理,过滤敏感词汇等 要在Javaweb项目中使用过滤器,实现Java - Servlet - Filter接口即可: 以下是一个模板,需要实现三个方法:
79 0
JavaWeb过滤器(Filter)详解
Filter:过滤器 1.概念: web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能 过滤器的作用:一般用于完成通用的操作,如登录验证、统一编码处理、敏感字符过滤等等。
|
数据处理
javaweb Filter过滤器
javaweb Filter过滤器
javaweb Filter过滤器
|
开发框架 JSON .NET
HttpClient 调用WebAPI时—传参的三种方式(ASP.NET MVC&CORE均适用)
HttpClient 调用WebAPI时—传参的三种方式(ASP.NET MVC&CORE均适用)
233 0
|
XML 数据格式
【Javaweb】过滤器Filter
【Javaweb】过滤器Filter
【Javaweb】过滤器Filter