SpringBoot之AOP处理HTTP请求

11,508次阅读
15 条评论

共计 2048 个字符,预计需要花费 6 分钟才能阅读完成。

AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

前言

最近在学习 SpringBoot,在学习了 SpringBoot 之后的感觉就是给人全新的感觉,整个项目都几乎不怎么使用配置文件,全部通过注解来进行配置,再结合 Maven,开发效率有大大的提升。SpringBoot 之 AOP 处理 HTTP 请求

正文

在写 AOP 之前,首先要先引入 AOP 的依赖,在项目的 pom.xml 中加入如下依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
通过 AOP 来获取 HTTP 请求头的信息以及参数,从而可以对访问请求进行验证。
public class HttpAspect {private final static Logger LOGGER = LoggerFactory.getLogger(HttpAspect.class);

    @Pointcut(value = "execution(public * com.boy.controller.BoyController.*(..))")
    public void p(){}

    @Before("p()")
    public void doBefore(JoinPoint joinPoint){ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        //URL
        LOGGER.warn("URL={}",request.getRequestURL());

        //Method
        LOGGER.warn("Method={}",request.getMethod());

        //IP
        LOGGER.warn("IP={}",request.getRemoteAddr());

        //Class.Method
        LOGGER.warn("CLass.Method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName()+"()");

        //Args
        LOGGER.warn("Args={}",joinPoint.getArgs());

        //... 其余操作

    }

    @After("p()")
    public void doAfter(){LOGGER.warn("HttpAspect doAfter Running :"+new Date().getTime());
    }

}
由上述代码可以得到 HTTP 请求的信息,这样可以根据业务需要来进行对请求的验证或审核。运行结果如下:
2017-05-05 10:49:30.891  WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect                : URL=http://localhost:8080/boys/3
2017-05-05 10:49:30.891  WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect                : Method=GET
2017-05-05 10:49:30.891  WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect                : IP=0:0:0:0:0:0:0:1
2017-05-05 10:49:30.893  WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect                : CLass.Method=com.boy.controller.BoyController.getBoy()
2017-05-05 10:49:30.893  WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect                : Args=3
2017-05-05 10:49:30.968  WARN 8748 --- [nio-8080-exec-1] com.boy.aspect.HttpAspect                : HttpAspect doAfter Running : 1493952570968
正文完
使用官方微信小程序体验更多功能
post-qrcode
 3
憧憬Licoy
版权声明:本站原创文章,由 憧憬Licoy 2017-05-05发表,共计2048字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(15 条评论)
﹏夜色ㄨ静好 评论达人 LV.1
2017-07-26 09:35:59 回复

来看下哈

 Windows  Chrome  中国广东省茂名市电信
奇跡の海 评论达人 LV.1
2017-07-25 16:31:43 回复

感谢楼主的分享

 Windows  Chrome  中国吉林省白山市电信
rushmyessay.cn代写服务 评论达人 LV.1
2017-06-06 19:18:38 回复

感谢楼主的分享

 Windows  Firefox  伊朗
风神博客 评论达人 LV.1
2017-05-29 08:39:46 回复

你的代码高亮复制功能怎么实现的,请教

 iPhone  Safari  中国河南省洛阳市联通
代理记账 评论达人 LV.1
2017-05-16 17:33:17 回复

代码好高大上的感觉呢。。。

 Windows  Chrome  中国上海上海市联通
WordPress头条 评论达人 LV.1
2017-05-10 06:55:33 回复

依赖注入,控制反转 :oops:

 Windows  Chrome  中国黑龙江省哈尔滨市电信
春熙路 评论达人 LV.1
2017-05-09 10:01:17 回复

默默点赞

 Windows  Chrome  中国广东省广州市电信
星空游戏 评论达人 LV.1
2017-05-06 09:33:03 回复

极大缩小了你们开发的时间

 Windows  Chrome  中国四川省成都市电信