Используйте метод map
для преобразования значения Optional
.После преобразования вы можете использовать метод orElseThrow
для распаковки Optional
, выдавая исключение, если оно пустое.
Примерно так:
return Optional.ofNullable(claims.get().getSubject())
.map(userDetailsService::loadUserByUsername)
.map(userDetails -> {
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(
userDetails, null, userDetails.getAuthorities());
authentication.setDetails(
new WebAuthenticationDetailsSource().buildDetails(request));
return authentication;
})
.orElseThrow(() -> new BadCredentialsException(
"The authentication token " + optToken + " did not contain a subject."));
Однако в вашемВ конкретном случае может быть проще вообще не использовать Optional
.Вы можете просто проверить на ноль немедленно.
String subject = claims.get().getSubject();
if (subject == null) {
throw new BadCredentialsException(
"The authentication token " + optToken + " did not contain a subject.");
}
UsernamePasswordAuthenticationToken authentication = ... ;