我正在使用带有Okta的springboot安全性进行身份验证。我目前正在尝试创建一个实现OidcUser的抽象类,以封装一些方法。例如:
public abstract class OktaUser implements OidcUser {
public UUID getUserId() {
return UUID.fromString(Objects.requireNonNull(this.getAttribute("user_id")));
}
}
我通常会注入OidcUser(正在工作)
@GetMapping
public User currentUser(@AuthenticationPrincipal OidcUser oidcUser) {
UUID id = UUID.fromString(Objects.requireNonNull(oidcUser.getAttribute("user_id")));
return userService.getUser(id);
}
但是我想这样做(不起作用)
@GetMapping
public User currentUser(@AuthenticationPrincipal OktaUser oktaUser) {
return userService.getUser(oktaUser.getMicaUserId());
}
但是,oktaUser
始终为空。是否可以将OktaUser
注册为AuthenticationPrincipal
?
查看Spring Security指南:https://docs.spring.io/spring-security/site/docs/5.2.0.RELEASE/reference/htmlsingle/#mvc-authentication-principal
它正好解决了这个问题。您甚至可以定义注释,例如@MicaUser
,它将解决您的自定义实现。