需求
与对方进行文件交互(xml文件),但是对方需要对xml的属性进行base64的转换
注解
有两个注解 一个是加密 一个是解密
DecoderAs[ect解密 加密和解密差不多 就是换一下set值的方式就可以了
@Target(ElementType.METHOD)
public @interface DecoderMethod() {
}
@Component
@Slf4j
@Aspect
public class DecoderAspect {
@Pointcut("@annotation(cy.example.demo.aop.DecoderMethod)")
public void decoderAs() {
}
@Before("decoderAs()")
public void doBefore(JoinPoint jp) throws IllegalAccessException, NoSuchFieldException {
Object[] args = jp.getArgs();
for (Object arg : args) {
if (arg instanceof String) {
Field value = arg.getClass().getDeclaredField("value");
value.setAccessible(true);
value.set(arg, "666".toCharArray());
continue;
}
Field[] declaredFields = arg.getClass().getDeclaredFields();
parseField(arg, declaredFields);
}
}
private void parseField(Object obj, Field[] fields) throws IllegalAccessException {
for (Field field : fields) {
Class<?> type = field.getType();
if (String.class.isAssignableFrom(type)) {
field.setAccessible(true);
Object o = field.get(obj);
log.info("field: {}", o.toString());
field.set(obj, ComUtils.encoderValue(field.get(obj).toString()));
continue;
}
if (List.class.isAssignableFrom(type)) {
field.setAccessible(true);
List list = (List) field.get(obj);
for (int i = 0; i < list.size(); i++) {
Object o = list.get(i);
Field[] declaredFields1 = o.getClass().getDeclaredFields();
parseField(o, declaredFields1);
}
continue;
}
field.setAccessible(true);
Object o = field.get(obj);
parseField(o, o.getClass().getDeclaredFields());
}
}
}