`
数字3
  • 浏览: 8333 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

拦截器获取被拦截方法的参数和返回值,并判断传参是否为空

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.util.StringUtils;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Created by xuweilin on 12/16/16.
*/
@Aspect   //定义一个切面
@Configuration
public class LogRecordAspect {
private static final Logger logger = LoggerFactory.getLogger(LogRecordAspect.class);

    // 定义切点Pointcut,UserController类的所有方法
    @Pointcut("execution(* com.myhexin.xwl.UserController.*(..))")
    public void excudeService() {
    }

    // 定义切点Pointcut,controller包和所有子包的所有类的方法执行
    @Pointcut("execution(* com.myhexin.xwl.controller..*.*(..))")
    public void excudeService2() {
    }

    //表示上面两个都匹配
    @Pointcut("excudeService() || excudeService2()")
    public void excudeService3() {
    }

    @Around("excudeService3()")
    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);
       
        String res=queryString.replaceAll("%22", "");
        logger.info(res);
       
        String[] str=res.split("&");
        //判断传入的参数是否为空
        for(String str1:str){
        String[] str2=str1.split("=");
        if(str2.length<=1){
        logger.info(str2[0]+"为空!");
            break;
        }else if(StringUtils.isEmpty(str2[1])){
        logger.info(str2[0]+"为空!");
            break;
        }
       
        }

        //获取将要执行的方法名称 
        String methodName = pjp.getSignature().getName();
        //获取执行方法的参数 
        Object[] args = pjp.getArgs();
        args[args.length-1]=true;
        //从参数列表中获取参数对象 
        for(Object obj : args){//查看参数值 
           System.out.println("***********"+obj.toString()); 
        }

        // result的值就是被拦截方法的返回值
        Object result = pjp.proceed();
        //不返回,被拦截的方法返回值不能被接收(如:前台不能接收到值)
        return result;
    }
}
分享到:
评论

相关推荐

    MyBatis拦截器分页与动态修改SQL及其参数值

    在这个主题中,我们将深入探讨如何利用MyBatis拦截器实现分页以及动态地修改SQL语句和参数值。 首先,我们关注的是"PaginationInterceptor.java",这是一个常见的分页拦截器实现。在MyBatis中,我们可以创建自定义...

    拦截器、过滤器、参数读取坑记录

    在Java Web开发中,拦截器(Interceptor)和过滤器(Filter)是两种常见的处理请求和响应的机制。它们都在请求到达目标Servlet之前进行介入,但各自有着不同的应用场景和功能特点。参数读取则是从客户端传递到服务器...

    MyBatis拦截器:给参数对象属性赋值的实例

    当拦截器的`intercept`方法被调用时,它首先获取到方法的所有参数,并打印当前线程ID。然后,它遍历这些参数,检查每个参数的类型。这里重点关注的是第一个参数,因为它是`MappedStatement`,包含了SQL命令的类型。 ...

    Spring拦截器,高级参数绑定

    Spring MVC中的拦截器是基于AOP(面向切面编程)原理实现的,可以理解为对Controller方法调用的预处理和后处理。下面将详细探讨Spring拦截器的使用以及高级参数绑定和Controller返回值的相关知识。 首先,我们创建...

    asp.net Core Post Json方式给控制器Action传参并拦截丢失参数等错误信息

    原生asp.net不支持通过json提交 方式给控制器的Action传参数,本程序通过给自定义输入字符串格式方法。在action的传参上加入FromJsonKey属性即可在传入的json中传入参数,如果传入的json中不存在相应键即报错 ...

    详解利用SpringMVC拦截器控制Controller返回值

    总结起来,这个示例展示了如何通过Spring MVC的拦截器和自定义注解来控制Controller方法的返回值。在开发过程中,你可以利用这个机制快速地构建和测试接口,而不需要每次都编写完整的方法实现。这种灵活性有助于提高...

    详解Retrofit Interceptor(拦截器) 拦截请求并做相关处理

    拦截器可以拦截请求并做相关处理,典型的处理方式是修改 header,但我们也可以在拦截器内部添加统一参数等。 Interceptor 接口只有一个方法,即 intercept(Chain chain) 方法,该方法返回 Response 对象,是响应...

    webwork 权限拦截器

    在Web开发中,权限拦截器扮演着至关重要的角色,它可以在用户请求到达控制器之前进行预处理,判断用户是否有权访问特定的资源或执行特定的操作。这样可以有效地提高系统的安全性,避免非法用户对敏感数据或功能的不...

    jfinal中拦截器(Interceptor)的参数注入

    jfinal中拦截器(Interceptor)的参数注入jfinal中拦截器(Interceptor)的参数注入

    理解拦截器用于在某个方法或字段被访

    拦截器是面向切面编程(AOP)的一个重要概念,它允许在方法或字段被访问之前或之后插入额外的操作。这提供了一种灵活的方式,可以在不修改原有代码的情况下,增强或控制程序的行为。在Web开发框架如Struts 2中,拦截...

    mybatis 分页拦截器及拦截器配置

    MyBatis 分页拦截器是实现数据库查询分页效果的一种高效解决方案。在传统的SQL查询中,我们通常需要手动编写...在实际项目中,根据业务需求选择合适的分页插件,并正确配置拦截器,能够有效提升开发效率和代码质量。

    Mybatis分页拦截器

    同时,拦截器还可以获取到参数和返回值,以便进行更复杂的逻辑处理。 关于分页拦截器的使用,开发者需要考虑以下几点: 1. 配置拦截器:在mybatis-config.xml中,使用标签添加分页拦截器的配置。 2. 参数传递:通常...

    spring mvc 拦截器获取请求数据信息.rar

    1. `preHandle`: 这个方法在请求处理之前被调用,返回值为布尔类型,如果返回`true`,则表示允许继续处理请求;如果返回`false`,请求将会被中断。 2. `postHandle`: 这个方法在控制器处理完请求后,但在视图渲染...

    mybatis拦截器实现通用权限字段添加的方法

    MyBatis拦截器实现通用权限字段添加的方法 MyBatis拦截器是一种非常实用的技术,可以用来实现各种复杂的数据库操作。本文将详细介绍如何使用MyBatis拦截器来实现通用权限字段添加,达到灵活、可靠、可维护的数据库...

    拦截器解决中文乱码问题

    如果已经有一个处理编码的过滤器存在,我们需要确保拦截器和过滤器之间的工作不会冲突。 6. **测试与调试**:在实现和配置好拦截器后,进行充分的测试是必不可少的。可以尝试发送包含中文的请求,检查是否还有乱码...

    防止SpringMVC拦截器拦截js等静态资源文件的解决方法

    在本文中,我们讨论了三种解决SpringMVC拦截器拦截静态资源文件的方法,并对这些方法的优劣进行了分析。 方案一是在拦截器中排除静态资源路径。在SpringMVC的配置文件中(通常是spring-mvc.xml),可以通过配置元素...

    springboot利用拦截器打印各个接口的响应时间.rar

    springboot利用拦截器打印各个接口的响应时间,快速统计各接口执行速度,方便接口优化。springboot利用拦截器打印各个接口的响应时间,快速统计各接口执行速度,方便接口优化。springboot利用拦截器打印各个接口的响应...

    Mybatis拦截器实现统计sql执行时间及打印完整sql语句

    此外,如果你还希望打印出完整的 SQL 语句,可以在 `Executor` 的 `update` 或 `query` 方法的拦截逻辑中,获取并处理 `BoundSql` 对象,它包含了 SQL 语句和参数信息。通常,你可以通过 `executor.query(statement,...

Global site tag (gtag.js) - Google Analytics