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

parameter拦截器

    博客分类:
  • JAVA
 
阅读更多

拦截一些非法的参数信息,使用注解的方式

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拦截器分页与动态修改SQL及其参数值

    在MyBatis框架中,拦截器(Interceptor)是一种强大的工具,可以用来在SQL执行前后进行扩展,例如实现分页、动态SQL修改、日志记录等功能。在这个主题中,我们将深入探讨如何利用MyBatis拦截器实现分页以及动态地...

    webwork 权限拦截器

    WebWork权限拦截器是WebWork框架中的一个重要组件,主要用于实现基于拦截器(interceptor)的权限控制。在Web开发中,权限拦截器扮演着至关重要的角色,它可以在用户请求到达控制器之前进行预处理,判断用户是否有权...

    MyBatis拦截器(csdn)————程序.pdf

    MyBatis拦截器概述 MyBatis拦截器是一种强大的工具,允许开发者在DAO层和数据库之间进行额外的处理。通过拦截器,可以实现诸如分页、插入和更新时间/人、数据权限、SQL监控日志等功能,从而提高开发效率。 MyBatis...

    Mybatis拦截器介绍及分页插件示例

    ### Mybatis拦截器介绍及分页插件 #### 1.2 前言 在Mybatis框架中,拦截器(Interceptor)是一个重要的组件,它允许开发者在不修改框架核心逻辑的情况下,添加自定义的行为。例如,可以在SQL执行前后添加日志记录...

    MyBatis拦截器分页

    MyBatis拦截器分页是实现数据库查询优化和提高应用性能的一种有效手段。在MyBatis框架中,拦截器扮演着动态代理的角色,允许我们在执行SQL之前或之后进行额外的操作,比如统计、日志记录或者在本例中的分页处理。...

    springboot+mybatis拦截器实现自动分页

    2. **配置拦截器**: 在Spring Boot的配置文件`application.yml`或`application.properties`中,我们需要配置MyBatis的拦截器,并将我们创建的`PaginationInterceptor`加入到拦截器链中。 ```yaml mybatis: ...

    struts拦截器介绍

    27. **Parameter FilterInterceptor**:参数过滤拦截器,从参数列表中删除不必要的参数。 28. **ProfilingInterceptor**:性能剖析拦截器,可以通过参数激活性能分析,默认的拦截器栈设计适用于大多数应用程序。 ...

    拦截器,实用型

    ### 拦截器实战与应用详解 #### 一、登录检查拦截器 在Web应用开发中,登录检查是一项常见的需求。很多功能都需要用户登录后才能访问或操作,因此实现有效的登录检查机制变得尤为重要。 ##### 实现原理 登录检查...

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

    Mybatis 拦截器是 Mybatis 框架中的一种高级特性,它允许开发者在特定的执行点插入自定义的代码逻辑。在本例中,我们关注的是如何使用拦截器来实现 SQL 执行时间的统计以及打印完整的 SQL 语句。这在调试和性能优化...

    filter对request请求拦截,对请求参数进行修改

    对request请求进行拦截,对请求参数修改。常用于前台提交表单参数关键字的过滤。此工具可以对参数拦截并转义后提交到对应的处理类。 除了添加两个JsFilter.java和GetHttpServletRequestWrapper.java之外,需要在web....

    java利用mybatis拦截器统计sql执行时间示例

    在Java开发中,MyBatis是...总之,利用MyBatis拦截器统计SQL执行时间是一种有效的性能优化手段,通过自定义拦截器,我们可以在不影响原有业务逻辑的情况下,获取到关键的执行时间信息,为数据库性能调优提供数据支持。

    spring第11章--ajax,上传下载,拦截器.rar_spring mvc_spring 下载_spring 使用ajax

    本章将探讨如何在Spring MVC中集成和使用Ajax,以及涉及的上传和下载功能,同时还会介绍Spring MVC中的拦截器。 1. **Spring MVC与Ajax交互**: - **jQuery Ajax**:Spring MVC常与jQuery库结合使用,通过$.ajax()...

    MyBatis Excutor 拦截器的巧妙用法

    MyBatis Executor 拦截器的巧妙用法 MyBatis Executor 拦截器的巧妙用法是指在拦截器中执行额外 MyBatis 现有方法的用法,并提供了解决拦截Executor时想要修改MappedStatement时解决并发的问题。这种用法可以应用于...

    spring自定义注解实现拦截器的实现方法

    `&lt;aop:advisor&gt;`元素则将切入点与拦截器关联起来,`advice-ref`属性指定了拦截器的bean id。 ```xml &lt;bean id="springMethodInterceptor" class="com.qunar.wireless.ugc.interceptor.LoginRequiredInterceptor1"&gt;...

    在springboot中使用注解将值注入参数的操作

    为了使 Spring Boot 支持该拦截器,我们需要修改启动类,继承 WebMvcConfigurationSupport 类,并添加自定义的拦截器。在本例中,我们定义了一个名为 DemoApplication 的启动类,该类继承了 ...

    mybatis Sql打印两种方式

    本篇文章将详细讲解两种在MyBatis中实现SQL打印的方法:通过log4j配置和使用MyBatis拦截器。 1. **log4j配置SQL打印** Log4j是一款广泛使用的日志记录工具,它可以方便地记录程序运行过程中的各类信息,包括SQL...

    axios-concurrency:Axios的并发管理器。 控制axios实例同时发出的请求数量。 对处理速率限制很有用。 使用拦截器实现

    使用axios拦截器实现 正在安装 $ npm install axios-concurrency 例子 const { ConcurrencyManager } = require ( "axios-concurrency" ) ; const axios = require ( "axios" ) ; let api = axios . create ( { ...

    Struts2架构剖析

    总的来说,Struts2架构的核心在于FilterDispatcher、ActionMapper、ActionProxy、ActionInvocation、拦截器和ActionContext,它们共同协作,实现了请求处理、业务逻辑执行以及响应生成的过程。这种设计模式使得...

    SpringMVC的Body参数拦截的问题

    这两种拦截器都可以通过@ControllerAdvice注解进行全局应用,或者针对特定的控制器或方法进行配置。在实际开发中,RequestBodyAdvice常用于数据验证、安全过滤、动态数据填充等;ResponseBodyAdvice则适用于响应格式...

Global site tag (gtag.js) - Google Analytics