【问题标题】:Get specific header parameter using Spring AOP?使用 Spring AOP 获取特定的标头参数?
【发布时间】:2019-05-26 13:42:36
【问题描述】:

我创建了 Spring Boot REST API,其中所有端点都将具有标头参数“sessionGuid”。我想使用 AOP 打印该 sessionGuid。

@Before("PointcutDefinition.controllerLayer()")
  public void beforeAdvice(JoinPoint joinPoint)
  {
    Object[] signatureArgs = joinPoint.getArgs();
    for (Object signatureArg : signatureArgs)
    {
      System.out.println("Arg: " + signatureArg);
    }
  }

上面的代码正在打印所有参数,即如果我的 URL 是

{{base-url}}/v1/login/users/SOMENAME/status 它正在打印 SOMENAME (路径变量)和“sessionGuid”值。我只想打印标题参数“sessionGuid”中的值。

joinPoint.getArgs();正在返回一个数组。我不想打印类似 arg[1] 的内容,因为 sessionGuid 可能是不同操作中的第三或第四个参数。

有没有一种方法可以让我从标题中只打印“sessionGuid”。

【问题讨论】:

    标签: spring spring-boot aop pointcut


    【解决方案1】:

    如果您正在寻找问题的解决方案,您可以直接使用RequestContextHolder

        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String header = request.getHeader("sessionGuid")
    

    如果您想更通用,也可以使用反射 API。

    【讨论】:

    • 使用 spring 拦截器也可以完成类似的事情,但这里的问题是如何使用 AOP 来完成。了解和访问标头值在一个方面可能很有用。例如安全方面
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多