| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package cn.com.goldenwater.dcproj.target;
- import org.aspectj.lang.JoinPoint;
- import org.aspectj.lang.annotation.Aspect;
- import org.aspectj.lang.annotation.Before;
- import org.aspectj.lang.annotation.Pointcut;
- import org.aspectj.lang.reflect.MethodSignature;
- import org.springframework.stereotype.Component;
- import java.lang.reflect.Field;
- import java.lang.reflect.Parameter;
- import java.util.Arrays;
- @Aspect
- @Component("validInValueAop")
- public class ValidInValueAop {
- private final static String[] badSqlflag=new String[]{"(",")","=","<",">"};
- @Pointcut("@annotation(cn.com.goldenwater.dcproj.target.ValidInValue)")
- public void validInValueAop() {
- }
- @Before(value = "validInValueAop()")
- public void beforeMethod(JoinPoint joinPoint) throws Exception {
- Object[] args = joinPoint.getArgs();
- //获取方法参数
- MethodSignature signature = (MethodSignature) joinPoint.getSignature();
- Parameter[] parameters = signature.getMethod().getParameters();
- for (int i = 0; i < parameters.length; i++) {
- Parameter parameter = parameters[i];
- Class<?> paramClazz = parameter.getType();
- Object arg = Arrays.stream(args).filter(ar -> paramClazz.isAssignableFrom(ar.getClass())).findFirst().get();
- //得到参数的所有成员变量
- Field[] declaredFields = paramClazz.getDeclaredFields();
- for (Field field : declaredFields) {
- field.setAccessible(true);
- ValidInValue validInValue = field.getAnnotation(ValidInValue.class);
- if (validInValue != null) {
- if (!String.class.isAssignableFrom(field.getType())) {
- throw new RuntimeException("ValidInValue Annotation using in a wrong field class");
- }
- String fieldStr = (String) field.get(arg);
- //该字段可以为空,但是不能包含特殊字符
- if(fieldStr !=null && !"".equals(fieldStr.trim())){
- for(String str:badSqlflag){
- if(fieldStr.contains(str)){
- throw new RuntimeException(field.getName()+validInValue.msg());
- }
- }
- }
- }
- }
- }
- }
- }
|