Puock主题已经正式发售,一款颜值在线的多功能WordPress主题,赶快戳我来看看吧

SpringBoot之AOP处理HTTP请求

9,684次阅读
15条评论

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

3
憧憬Licoy
版权声明:本站原创文章,由憧憬Licoy于2017年05月05日发表,共计2937字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(15条评论)
Loading...
﹏夜色ㄨ静好 评论达人LV.1
2017-07-26 09:35:59 回复

来看下哈

奇跡の海 评论达人LV.1
2017-07-25 16:31:43 回复

感谢楼主的分享

rushmyessay.cn代写服务 评论达人LV.1
2017-06-06 19:18:38 回复

感谢楼主的分享

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

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

代理记账 评论达人LV.1
2017-05-16 17:33:17 回复

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

WordPress头条 评论达人LV.1
2017-05-10 06:55:33 回复

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

春熙路 评论达人LV.1
2017-05-09 10:01:17 回复

默默点赞

星空游戏 评论达人LV.1
2017-05-06 09:33:03 回复

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