<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
然后在拦截器类中添加切面代码:
package com.tbms2;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import com.alibaba.fastjson.JSON;
@Component
@Aspect
public class WebControllerAop {
Logger logger = LoggerFactory.getLogger(WebControllerAop.class);
@Pointcut("execution(* com.tbms2.web..*.json*(..))")
public void executeService(){
@Before("executeService()")
public void doBeforeAdvice(JoinPoint joinPoint) {
logger.info("==> json方法调用开始...");
//获取目标方法的参数信息
Object[] obj = joinPoint.getArgs();
//AOP代理类的信息
joinPoint.getThis();
//代理的目标对象
joinPoint.getTarget();
//用的最多 通知的签名
Signature signature = joinPoint.getSignature();
//代理的是哪一个方法
logger.info("==> 代理的是哪一个方法 :"+signature.getName());
//AOP代理类的名字
logger.info("==> AOP代理类的名字:"+signature.getDeclaringTypeName());
//AOP代理类的类(class)信息
signature.getDeclaringType();
//获取RequestAttributes
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//从获取RequestAttributes中获取HttpServletRequest的信息
HttpServletRequest request = (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST);
logger.info("==> 请求者的IP:"+request.getRemoteAddr());
//如果要获取Session信息的话,可以这样写:
//HttpSession session = (HttpSession) requestAttributes.resolveReference(RequestAttributes.REFERENCE_SESSION);
Enumeration<String> enumeration = request.getParameterNames();
Map<String,String> parameterMap = new HashMap<String,String>();
while (enumeration.hasMoreElements()){
String parameter = enumeration.nextElement();
parameterMap.put(parameter,request.getParameter(parameter));
String str = JSON.toJSONString(parameterMap);
if(obj.length > 0) {
logger.info("==> 请求的参数信息为:"+str);
springboot使用注解aop,获取注解参数,处理request和response
这里实现一个简单的登陆判断注解
加了LonginAction的方法必须登陆才能执行
首先检查是否导入相关springboot aop启动器依赖
<dependency>
<groupId>org.springframework.boot</groupI...
SpringBoot 项目整合启动报错:java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/ser
根据前端请求获取方法名、参数、路径等信息
//在一个方法里面如果想获取请求信息,需要从请求上下文获取request,或者在参数列表使用HttpServletRequest request
①在方法中获取请求上下文
// 接收到请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestConte...
1.SpringBoot之集成Spring AOP 学习新知识点:RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//从获取RequestAttributes中获取HttpServletRequest的信息
HttpServletRequest request = (Htt...
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
Enumeration e = request....
在子线程中使用下面的方法获取 requestAttributes 为空。
二、解决方法
这里提供两种解决方法,方法一适用于某个请求的业务方法;方法二具有通用性,适用于整个项目。注意:以下两种解决方法,需要在 Servlet 的生命周期内使用,否则会导致 requestAttributes 中获取到的属性为空。在子线程启动前,加入下面的代码,可以使 requestAttributes 被子线程继承。
2、方法二
添加一个配置类。
Servlet 初始化时,会调用 FrameworkServlet 中
//获取RequestAttributes
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//从获取RequestAttributes中获取HttpServletRequest的信息
HttpServletRequest request = (HttpServletRequest)requestA
//通知的签名
// Signature signature = joinPoint.getSignature();
// if ("login".equals(signature.getName())) {
// return joinPoint.proceed();
// }else{
// ...