SpringBoot使用AOP获取请求参数

package com.*.aop;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

/**
 * @Description //请求参数aop
 **/
@Component
@Aspect
@Slf4j
public class RequestParameterAop {

    /**
     * @Description: 定义需要拦截的切面
     * @Return: void
     * @Author: yangli
     * @Date: 2019/9/06-10:17
     **/
    @Pointcut("execution(* com.*.controller.*Controller.*(..))")
    public void methodArgs() {

    }

    @Around("methodArgs()")
    public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
        Object result = null;

        // 获取请求参数进行打印
        Signature signature = joinPoint.getSignature();
        JSONObject signatureJson = JSON.parseObject(JSON.toJSONString(signature));
        // 方法名
        String methodName = signatureJson.getString("name");
        // 类名
        String serviceName = signatureJson.getString("declaringType");

        // 参数名数组
        JSONArray parameterNames = signatureJson.getJSONArray("parameterNames");
        // 构造参数组集合
        List<Object> argList = new ArrayList<>();
        for (Object arg : joinPoint.getArgs()) {
            // request/response无法使用toJSON
            if (arg instanceof HttpServletRequest) {
                argList.add("request");
            } else if (arg instanceof HttpServletResponse) {
                argList.add("response");
            } else {
                argList.add(JSON.toJSON(arg));
            }
        }

        try {
            log.error("{} -> 方法({}) -> 参数:{} - {}", serviceName, methodName, JSON.toJSON(parameterNames), JSON.toJSON(argList));
        } catch (Exception e) {
            log.error("参数获取失败: {}", e.getMessage());
        }

        result = joinPoint.proceed();

        return result;
    }

}

原文地址:https://www.cnblogs.com/timeflying/p/11523314.html

时间: 2024-10-27 13:48:12

SpringBoot使用AOP获取请求参数的相关文章

Struts2 -- 获取请求参数

1.直接将action做一个model,就可以得到请求参数. 缺点:需要单独定义javaBean,将action中属性copy到javaBean中.                     优点:简单.                                 这种方式 ,底层是通过反射来实现的. //获取请求参数 属性驱动 第一种,直接将action做为model public class DemoAction extends ActionSupport { private String

JavaWeb获取请求参数的两种方式

第一种:通过获取缓冲流读取参数 public void registerUser(HttpServletRequest request, HttpServletResponse response)throws  Exception  { //直接获取请求参数,通过缓冲流读取数据  BufferedReader br=request.getReader();  String inputLine = "";  String json = "";      while (

php 获取请求参数

$value = $_POST["value"];//取得post中的 $value=$_REQUEST["value"];//取得get或者post中的参数(哪个有就取得哪个) $value=$_GET["value"];//取得get中的参数 php 获取请求参数,布布扣,bubuko.com

获取请求参数js代码

/*获取请求参数 */ (function($) {     $.getUrlParam = function(name) {         var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");         var r = window.location.search.substr(1).match(reg);         if (r != null)            

学习SpirngMVC之如何获取请求参数

学习SpringMVC——如何获取请求参数 @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView)!它(@ModelAttribute)!没错,仅注解这块,spring mvc就为你打开了五彩斑斓的世界.来来来,不要兴(mi)奋(hu),坐下来,我们好好聊聊这么些个注解兄弟们~~~(wait, 都没有听过? 好,来,你坐前排,就你!) 一.spring

servlet-api api文档获取请求参数

1.假如有个get请求后面带有的参数如下: a=b&a2=b2&a3=b3&a4=b4. 如果想获取所有的key,value.这个时候可以根据request的getQueryString获取.但是这样有个问题,getQueryString方法并不会对参数进行解码. 可以使用: String decode = URLDecoder.decode(url, “utf-8”)方法进行解码操作. 2.假如请求参数是在body中的话,getQueryString方法就不能获取请求参数了. 只

在拦截器中获取请求参数,[Ljava.lang.String; cannot be cast to java.lang.String报错

Map<String,Object> parametersmap=invocation.getInvocationContext().getParameters();//获取请求参数                Set<String> parametersset=parametersmap.keySet();                for(String key:parametersset){ System.out.println(key+":"+par

Struts2中获取请求参数

Action在Strucs中负责请求参数的处理,那么他是如何实现的呢?这篇博文就将给大家做个简单的介绍.在struts中,获取请求参数主要有一下两种方式: 1.属性驱动方式 方式一:使用属性驱动,直接将Action作为Model;但是这样做不好的一点就是无法将参数传到Service层进行进一步处理. package cn.tgb.action; //方式一:使用属性驱动,将Action作为Model public class Action01 { private String name; pri

学习SpringMVC——如何获取请求参数

@RequestParam @PathVariable @QueryParam @CookieValue @ModelAndView @ModelAttribute 一.spring mvc如何匹配请求路径--"请求路径哪家强,RequestMapping名远扬" @RequestMapping是用来映射请求的,比如get请求,post请求,或者REST风格与非REST风格的. 该注解可以用在类上或者方法上,如果用于类上,表示该类中所有方法的父路径. @Controller的注解,该注