拦截一些非法的参数信息,使用注解的方式
mport java.lang.annotation.Annotation; import java.util.Collection; import java.util.Collections; import java.util.Map; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class ParameterValidateInterceptor implements MethodInterceptor { private static Log logger = LogFactory .getLog(ParameterValidateInterceptor.class); private boolean isExpectedParamValue(Annotation[] annotations, Object[] params, int index) { if (annotations != null && annotations.length > 0) { for (Annotation annotation : annotations) { if (annotation instanceof ParamValueValidator) { ParamValueValidator validatorAnnotation = (ParamValueValidator) annotation; if (String.class.isAssignableFrom(validatorAnnotation.classType())) return !StringUtil.isEmpty((String)params[index]); if (Integer.class.isAssignableFrom(validatorAnnotation .classType())) return (Integer) params[index] > 0; if (Long.class.isAssignableFrom(validatorAnnotation .classType())) return (Long) params[index] > 0; if (Collection.class.isAssignableFrom(validatorAnnotation .classType())) return params[index] != null && !((Collection>) params[index]).isEmpty(); } } } return true; } @Override public Object invoke(MethodInvocation invocation) throws Throwable { Object[] params = invocation.getArguments(); if (params != null && params.length > 0) { Annotation[][] annotationss = invocation.getMethod() .getParameterAnnotations(); if (annotationss == null || annotationss.length == 0) return invocation.proceed(); for (int i = 0; i < annotationss.length; i++) { Annotation[] annotations = annotationss[i]; if (!isExpectedParamValue(annotations, params, i)) { String methodName = " [" + invocation.getMethod().getDeclaringClass().getName() + "." + invocation.getMethod().getName() + "] "; logger.debug(methodName + "the parameter value isn't as we expected,null/empty is return."); if (Collection.class.isAssignableFrom(invocation .getMethod().getReturnType())) return Collections.emptyList(); if (Map.class.isAssignableFrom(invocation.getMethod() .getReturnType())) return Collections.emptyMap(); return null; } } } return invocation.proceed(); }
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface ParamValueValidator { Class<?> classType(); }
相关推荐
在MyBatis框架中,拦截器(Interceptor)是一种强大的工具,可以用来在SQL执行前后进行扩展,例如实现分页、动态SQL修改、日志记录等功能。在这个主题中,我们将深入探讨如何利用MyBatis拦截器实现分页以及动态地...
WebWork权限拦截器是WebWork框架中的一个重要组件,主要用于实现基于拦截器(interceptor)的权限控制。在Web开发中,权限拦截器扮演着至关重要的角色,它可以在用户请求到达控制器之前进行预处理,判断用户是否有权...
MyBatis拦截器概述 MyBatis拦截器是一种强大的工具,允许开发者在DAO层和数据库之间进行额外的处理。通过拦截器,可以实现诸如分页、插入和更新时间/人、数据权限、SQL监控日志等功能,从而提高开发效率。 MyBatis...
### Mybatis拦截器介绍及分页插件 #### 1.2 前言 在Mybatis框架中,拦截器(Interceptor)是一个重要的组件,它允许开发者在不修改框架核心逻辑的情况下,添加自定义的行为。例如,可以在SQL执行前后添加日志记录...
MyBatis拦截器分页是实现数据库查询优化和提高应用性能的一种有效手段。在MyBatis框架中,拦截器扮演着动态代理的角色,允许我们在执行SQL之前或之后进行额外的操作,比如统计、日志记录或者在本例中的分页处理。...
2. **配置拦截器**: 在Spring Boot的配置文件`application.yml`或`application.properties`中,我们需要配置MyBatis的拦截器,并将我们创建的`PaginationInterceptor`加入到拦截器链中。 ```yaml mybatis: ...
27. **Parameter FilterInterceptor**:参数过滤拦截器,从参数列表中删除不必要的参数。 28. **ProfilingInterceptor**:性能剖析拦截器,可以通过参数激活性能分析,默认的拦截器栈设计适用于大多数应用程序。 ...
### 拦截器实战与应用详解 #### 一、登录检查拦截器 在Web应用开发中,登录检查是一项常见的需求。很多功能都需要用户登录后才能访问或操作,因此实现有效的登录检查机制变得尤为重要。 ##### 实现原理 登录检查...
Mybatis 拦截器是 Mybatis 框架中的一种高级特性,它允许开发者在特定的执行点插入自定义的代码逻辑。在本例中,我们关注的是如何使用拦截器来实现 SQL 执行时间的统计以及打印完整的 SQL 语句。这在调试和性能优化...
对request请求进行拦截,对请求参数修改。常用于前台提交表单参数关键字的过滤。此工具可以对参数拦截并转义后提交到对应的处理类。 除了添加两个JsFilter.java和GetHttpServletRequestWrapper.java之外,需要在web....
在Java开发中,MyBatis是...总之,利用MyBatis拦截器统计SQL执行时间是一种有效的性能优化手段,通过自定义拦截器,我们可以在不影响原有业务逻辑的情况下,获取到关键的执行时间信息,为数据库性能调优提供数据支持。
本章将探讨如何在Spring MVC中集成和使用Ajax,以及涉及的上传和下载功能,同时还会介绍Spring MVC中的拦截器。 1. **Spring MVC与Ajax交互**: - **jQuery Ajax**:Spring MVC常与jQuery库结合使用,通过$.ajax()...
MyBatis Executor 拦截器的巧妙用法 MyBatis Executor 拦截器的巧妙用法是指在拦截器中执行额外 MyBatis 现有方法的用法,并提供了解决拦截Executor时想要修改MappedStatement时解决并发的问题。这种用法可以应用于...
`<aop:advisor>`元素则将切入点与拦截器关联起来,`advice-ref`属性指定了拦截器的bean id。 ```xml <bean id="springMethodInterceptor" class="com.qunar.wireless.ugc.interceptor.LoginRequiredInterceptor1">...
为了使 Spring Boot 支持该拦截器,我们需要修改启动类,继承 WebMvcConfigurationSupport 类,并添加自定义的拦截器。在本例中,我们定义了一个名为 DemoApplication 的启动类,该类继承了 ...
本篇文章将详细讲解两种在MyBatis中实现SQL打印的方法:通过log4j配置和使用MyBatis拦截器。 1. **log4j配置SQL打印** Log4j是一款广泛使用的日志记录工具,它可以方便地记录程序运行过程中的各类信息,包括SQL...
使用axios拦截器实现 正在安装 $ npm install axios-concurrency 例子 const { ConcurrencyManager } = require ( "axios-concurrency" ) ; const axios = require ( "axios" ) ; let api = axios . create ( { ...
总的来说,Struts2架构的核心在于FilterDispatcher、ActionMapper、ActionProxy、ActionInvocation、拦截器和ActionContext,它们共同协作,实现了请求处理、业务逻辑执行以及响应生成的过程。这种设计模式使得...
这两种拦截器都可以通过@ControllerAdvice注解进行全局应用,或者针对特定的控制器或方法进行配置。在实际开发中,RequestBodyAdvice常用于数据验证、安全过滤、动态数据填充等;ResponseBodyAdvice则适用于响应格式...