• Spring-boot 配置Aop获取controller里的request中的参数以及其返回值


    示例:

    当前url:http://localhost:8080/CarsiLogCenter_new/idpstat.jsp?action=idp.sptopn
    
    request.getRequestURL() http://localhost:8080/CarsiLogCenter_new/idpstat.jsp
    request.getRequestURI() /CarsiLogCenter_new/idpstat.jsp
    request.getContextPath()/CarsiLogCenter_new
    request.getServletPath() /idpstat.jsp
    
    request.getQueryString() action=idp.sptopn
        public static String getLastAccessUrl(HttpServletRequest request) {
            StringBuffer requestURL = request.getRequestURI();
            String queryString = request.getQueryString();
            if (queryString == null) {
                return requestURL.toString();
            }
            return requestURL + "?" + queryString;
        }

    1、request.getRequestURL()
    返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它不包含请求参数。

    2、request.getRequestURI()
    得到的是request URL的部分值,并且web容器没有decode过的

    3、request.getContextPath()
    返回 the context of the request.

    4、request.getServletPath()
    返回调用servlet的部分url.

    5、request.getQueryString()
    返回url路径后面的查询字符串


    首先在你的Maven的pom文件里加入aop的依赖:

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-aop</artifactId>
      </dependency>
    
    

    在spring boot里面一切配置都是很简单的,下面为我所有被请求到的controller加上Aop的功能吧,看码:

    import javax.servlet.http.HttpServletRequest;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.context.request.RequestAttributes;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    import com.google.gson.Gson;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;;
    
    
    @Aspect   //定义一个切面
    @Configuration
    public class LogRecordAspect {
    private static final Logger logger = LoggerFactory.getLogger(UserInterceptor.class);
    
        // 定义切点Pointcut
        @Pointcut("execution(* com.jiaobuchong.web.*Controller.*(..))")
        public void excudeService() {
        }
    
        @Around("excudeService()")
        public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
            RequestAttributes ra = RequestContextHolder.getRequestAttributes();
            ServletRequestAttributes sra = (ServletRequestAttributes) ra;
            HttpServletRequest request = sra.getRequest();
    
            String url = request.getRequestURL().toString();
            String method = request.getMethod();
            String uri = request.getRequestURI();
            String queryString = request.getQueryString();
            logger.info("请求开始, 各个参数, url: {}, method: {}, uri: {}, params: {}", url, method, uri, queryString);
    
            // result的值就是被拦截方法的返回值
            Object result = pjp.proceed();
            Gson gson = new Gson();
            logger.info("请求结束,controller的返回值是 " + gson.toJson(result));
            return result;
        }
    }

    只要加上上面这个类,Aop就算配置好了,不信,去访问以下你的Controller试试。对比以前配置aop的方式(xml文件),现在的配置都到Java代码里来了,@Configuration这个Annotation就是JavaConfig的典型代表,Spring boot在启动时会会自动去加载这些配置,实现相应的配置功能。这个简单的小例子算是抛砖引玉吧,我也是参考别人的博客,更多细节,查看下面的博客: 
    http://ysj5125094.iteye.com/blog/2151855

    http://blog.csdn.net/jiaobuchong/article/details/50420379

  • 相关阅读:
    Python之Sklearn使用教程
    Centos 查看路径下所有文件中是否包含指定字符
    Centos7x 开启6379端口,Centos7x开启端口
    分享几个ip定位api【转】
    @Scheduled(cron = "* * * * * *")
    QueryRunner的使用
    linux redis重置密码、重启
    nginx里的sticky的作用
    windows环境xampp搭建php电商项目/搭建禅道
    hive中解决中文乱码
  • 原文地址:https://www.cnblogs.com/softidea/p/5904833.html
Copyright © 2020-2023  润新知