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语句和参数值。 首先,我们关注的是"PaginationInterceptor.java",这是一个常见的分页拦截器实现。在MyBatis中,我们可以创建自定义...
在Java Web开发中,拦截器(Interceptor)和过滤器(Filter)是两种常见的处理请求和响应的机制。它们都在请求到达目标Servlet之前进行介入,但各自有着不同的应用场景和功能特点。参数读取则是从客户端传递到服务器...
当拦截器的`intercept`方法被调用时,它首先获取到方法的所有参数,并打印当前线程ID。然后,它遍历这些参数,检查每个参数的类型。这里重点关注的是第一个参数,因为它是`MappedStatement`,包含了SQL命令的类型。 ...
Spring MVC中的拦截器是基于AOP(面向切面编程)原理实现的,可以理解为对Controller方法调用的预处理和后处理。下面将详细探讨Spring拦截器的使用以及高级参数绑定和Controller返回值的相关知识。 首先,我们创建...
原生asp.net不支持通过json提交 方式给控制器的Action传参数,本程序通过给自定义输入字符串格式方法。在action的传参上加入FromJsonKey属性即可在传入的json中传入参数,如果传入的json中不存在相应键即报错 ...
总结起来,这个示例展示了如何通过Spring MVC的拦截器和自定义注解来控制Controller方法的返回值。在开发过程中,你可以利用这个机制快速地构建和测试接口,而不需要每次都编写完整的方法实现。这种灵活性有助于提高...
拦截器可以拦截请求并做相关处理,典型的处理方式是修改 header,但我们也可以在拦截器内部添加统一参数等。 Interceptor 接口只有一个方法,即 intercept(Chain chain) 方法,该方法返回 Response 对象,是响应...
在Web开发中,权限拦截器扮演着至关重要的角色,它可以在用户请求到达控制器之前进行预处理,判断用户是否有权访问特定的资源或执行特定的操作。这样可以有效地提高系统的安全性,避免非法用户对敏感数据或功能的不...
jfinal中拦截器(Interceptor)的参数注入jfinal中拦截器(Interceptor)的参数注入
拦截器是面向切面编程(AOP)的一个重要概念,它允许在方法或字段被访问之前或之后插入额外的操作。这提供了一种灵活的方式,可以在不修改原有代码的情况下,增强或控制程序的行为。在Web开发框架如Struts 2中,拦截...
MyBatis 分页拦截器是实现数据库查询分页效果的一种高效解决方案。在传统的SQL查询中,我们通常需要手动编写...在实际项目中,根据业务需求选择合适的分页插件,并正确配置拦截器,能够有效提升开发效率和代码质量。
同时,拦截器还可以获取到参数和返回值,以便进行更复杂的逻辑处理。 关于分页拦截器的使用,开发者需要考虑以下几点: 1. 配置拦截器:在mybatis-config.xml中,使用标签添加分页拦截器的配置。 2. 参数传递:通常...
1. `preHandle`: 这个方法在请求处理之前被调用,返回值为布尔类型,如果返回`true`,则表示允许继续处理请求;如果返回`false`,请求将会被中断。 2. `postHandle`: 这个方法在控制器处理完请求后,但在视图渲染...
MyBatis拦截器实现通用权限字段添加的方法 MyBatis拦截器是一种非常实用的技术,可以用来实现各种复杂的数据库操作。本文将详细介绍如何使用MyBatis拦截器来实现通用权限字段添加,达到灵活、可靠、可维护的数据库...
如果已经有一个处理编码的过滤器存在,我们需要确保拦截器和过滤器之间的工作不会冲突。 6. **测试与调试**:在实现和配置好拦截器后,进行充分的测试是必不可少的。可以尝试发送包含中文的请求,检查是否还有乱码...
在本文中,我们讨论了三种解决SpringMVC拦截器拦截静态资源文件的方法,并对这些方法的优劣进行了分析。 方案一是在拦截器中排除静态资源路径。在SpringMVC的配置文件中(通常是spring-mvc.xml),可以通过配置元素...
springboot利用拦截器打印各个接口的响应时间,快速统计各接口执行速度,方便接口优化。springboot利用拦截器打印各个接口的响应时间,快速统计各接口执行速度,方便接口优化。springboot利用拦截器打印各个接口的响应...
此外,如果你还希望打印出完整的 SQL 语句,可以在 `Executor` 的 `update` 或 `query` 方法的拦截逻辑中,获取并处理 `BoundSql` 对象,它包含了 SQL 语句和参数信息。通常,你可以通过 `executor.query(statement,...