【发布时间】:2021-02-25 16:09:23
【问题描述】:
我试试: How to get the current logged in user object from spring security?
但不起作用。
如何将org.springframework.security.oauth2.jwt.Jwt@9f4f7d6e转换为用户名jwt?
我的课程开始于:
@Slf4j
@RestControllerAdvice
public class RestControllerExceptionHandler {
@ExceptionHandler(Throwable.class)
public final ResponseEntity<ErrorResponse> handleException(Throwable ex, WebRequest request) {
// ex.printStackTrace();
// Authentication authenticantion = SecurityContextHolder.getContext().getAuthentication();
String username = new String();
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
AbstractAuthenticationToken auth = (AbstractAuthenticationToken)
SecurityContextHolder.getContext().getAuthentication();
UserDetails details = (UserDetails) auth.getDetails();
log.error(ex.getMessage().toUpperCase() + " User: "+ username + " Source: " + request.getDescription(false));
....
【问题讨论】:
-
将原始 Jwt 包含为 Spring
Principal对象的内容不是一个好主意,因为您的其余代码将处理外部格式以提取安全信息和相关数据(因为您必须目前做)。更好的方法是将提供的安全信息转换为标准的Authentication对象(可能您正在将其转换为自己的安全过滤器)。这样,如果您修改内部 Jwt 令牌或使用其他安全选项,“您的代码的其余部分”将不会改变。
标签: java spring spring-security jwt