当前位置: 首页 > news >正文

(办公)springboot配置aop处理请求.

     最近项目用到springboot,就是需要配置一些东西.比如用aop处理请求.方法前通知获取url,method,ip,类方法,参数,方法后通知,返回参数,而且还可以记录一下日志.下面是操作的代码.

    

package com.imooc.shoptest001.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 *  刘运通
 *  20190324
 *  作用实现拦截http请求.
 */
@Aspect
@Component //把这个文件引入到Spring容器里面去.
public class HttpAspect {

    @Pointcut("execution(public * com.imooc.shoptest001.controller.UserController.*(..))")
    public void log(){

    }
    /**
     * 拦截那些方法.请求前.
     * JoinPoint 获取类方法和类名对象.
     */
    @Before("log()")
    public void logBefore(JoinPoint joinPoint){
        System.out.println("拦截了getInfo方法");
        //url,method,ip,类方法,参数.
        //SpringBoot通过RequestContextHolder获取HttpRequest和HttpResponse
        ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
        //javax.servlet.http.HttpServletRequest
        HttpServletRequest request = attributes.getRequest();
        System.out.println("url"+request.getRequestURL());
        System.out.println("method"+request.getMethod());
        System.out.println("ip"+request.getRemoteAddr());
        //类方法.
        System.out.println("类方法"+joinPoint.getSignature().getDeclaringTypeName()
                +"."+ joinPoint.getSignature().getName()
        );
        //参数:
        System.out.println("类方法"+joinPoint.getArgs());
    }
    /**
     * 拦截那些方法.请求后.
     */
    @After("log()")
    public void logAfter(){
        System.out.println("拦截了getInfo方法.之后");
    }

    /**
     * 返回参数.
     * @param object 入参
     */
    @AfterReturning(returning = "object",pointcut = "log()")
    public void doAfterReturning(Object object){
        System.out.println(object);
    }



}

 

转载于:https://www.cnblogs.com/historylyt/p/10588321.html

相关文章:

  • 3dmax学习9——镜像工具
  • Linux运维常见笔试题(选择题)
  • PBR公式总结
  • Chapter 16. Real-Time Approximations to Subsurface Scattering
  • spring boot中使用xml请求
  • unity shader——BRDF分析
  • 基于Redis实现简单的分布式锁【理论】
  • 学习java编程艺术文章的储存与整理第一章
  • 关于BRDF的一些总结——转自其他博客
  • js map 、filter 、forEach 、every、some 的用法
  • 【视频版】PDF合并器破解视频教程
  • git 随笔(随时更新)
  • C# 使用Exchange WebService读取联系人
  • Crafting 手工 Physically Motivated Shading Models for Game Development
  • 001 Android TextUtils工具类的使用
  • [PHP内核探索]PHP中的哈希表
  • 08.Android之View事件问题
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java小白进阶笔记(3)-初级面向对象
  • JS函数式编程 数组部分风格 ES6版
  • Mithril.js 入门介绍
  • passportjs 源码分析
  • Python中eval与exec的使用及区别
  • React的组件模式
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SpringBoot几种定时任务的实现方式
  • 分享一份非常强势的Android面试题
  • 基于axios的vue插件,让http请求更简单
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 正则表达式小结
  • 智能合约Solidity教程-事件和日志(一)
  • AI算硅基生命吗,为什么?
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​linux启动进程的方式
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (ZT)薛涌:谈贫说富
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (转)h264中avc和flv数据的解析
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ***详解账号泄露:全球约1亿用户已泄露
  • .bat文件调用java类的main方法
  • .FileZilla的使用和主动模式被动模式介绍
  • .Mobi域名介绍
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .NET正则基础之——正则委托
  • @Autowired多个相同类型bean装配问题
  • @ModelAttribute使用详解
  • @Not - Empty-Null-Blank
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [AIGC] 如何建立和优化你的工作流?