Как изменить возвращаемые значения в списке с помощью Spring AOP? - PullRequest
0 голосов
/ 17 октября 2018

Я использую метод search, который находится внутри моего BaseRepository, чтобы вернуть список на основе заданных условий поиска.Я использую запрос гибернации для этого.Некоторые значения в этом списке будут зашифрованы.Поэтому я хочу изменить этот список, прежде чем он будет возвращен с использованием Spring AOP.returnList в следующем коде содержит list результата поиска, к которому я обратился с помощью AOP.Я использую метод расшифровки, чтобы сделать дешифрование строки в этом списке, если строка зашифрована.Но как я могу внести изменения в следующий код, чтобы отразить в точном результате поиска.Я имею в виду, как расшифровка, сделанная на Аспекте, отразится в исходном списке.

@Aspect
@Service
public class DecryptionAspect {

    @AfterReturning(value="(execution(* search(..)) )" +
            "&& target(com.erp.core.repo.IBaseRepository) " +
            "&& args(..)",returning="returnList")
    public void decrypt(List returnList) throws Exception
    {

        Iterator itr = returnList.iterator();
        while(itr.hasNext()){
            Object[] obj = (Object[]) itr.next();
            for(int i=0;i<obj.length;i++){
                if(obj[i]!=null)
                EncryptUtil.decrypt(obj[i].toString());


            }

        }
    }

} 

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Предполагая, что все строки необходимо расшифровать, вы можете просто изменить массивы, содержащиеся в списке:

@AfterReturning(value="(execution(* search(..)) )" +
        "&& target(com.erp.core.repo.IBaseRepository) " +
        "&& args(..)",returning="returnList")
public void decrypt(List returnList) throws Exception
{
    for (Object [] objs : (List<Object[]>) returnList) {
        for (int i = 0; i < objs.length; i++) {
            if (objs[i] instanceof String) {
                objs[i]= EncryptUtil.decrypt(objs[i]);
            }
        }
    }
}
0 голосов
/ 17 октября 2018

Можно попробовать заменить элемент в списке «returnList».

@AfterReturning(value="(execution(* search(..)) )" +
        "&& target(com.erp.core.repo.IBaseRepository) " +
        "&& args(..)",returning="returnList")
public void decrypt(List returnList) throws Exception
{

    Iterator itr = returnList.iterator();
    int count=0;
    while(itr.hasNext()){
        Object[] obj = (Object[]) itr.next();
        Object[] newObjects = new Object[obj.length];
        for(int i=0;i<obj.length;i++){
            if(obj[i]!=null)
            String decryptedText = EncryptUtil.decrypt(obj[i].toString());
            newObjects[i] = decryptedText;
        }
        returnList.set(count,newObjects);
        count++;
    }
}
...