У меня есть JWE, который должен быть расшифрован с использованием списка ключей, хранящихся в БД.Я должен пробовать каждый ключ, пока не найду тот, который на самом деле расшифровывает.
Я пытаюсь сделать это в JAVA 8 способом, писать Lambdas, но я не могу понять, как это сделать.
Я написал следующий код
List<String> listKeys = myMapper.getDistinctEncKeyIds().stream() .map(MyMapper::encrypTionIdsfromDbData).collect(Collectors.toList());
Это дает мне список ключей, и я пишу обычный код Java
for(int i=0; i<listKeys.size();i++) {
try {
decryptedToken= decrypt(token,listKeys.get(i));
} catch(Exception e) {
log.info("key not found: %s", e);
}
}
Я хочу преобразовать его в JAVA 8лямбда-код, потому что он занимает меньше строк и легче использовать что-то вроде этого
myMapper.getDistinctEncKeyIds().stream()
.map(myMapper::encrypTionIdsfromDbData)
.filter(key-> decrypt(token,key))
.findFirst();
Но у меня есть две проблемы здесь
- Метод расшифровки фактически возвращает ключ, а фильтр принимаетметод, который возвращает логическое значение
- Метод расшифровки выдает JOSEException, снова я получаю сообщение об ошибке в фильтре, и мне нужно записать блок try / catch в лямбду
Моя цель найтиключ, который фактически расшифровывает этот токен и возвращает этот ключ.Я не понимаю, как написать это в Java 8. Заранее спасибо.