使用@AuthenticationPrincipal注入自定义OidcUser包装器

问题描述 投票:0回答:1

我正在使用带有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-boot spring-security okta
1个回答
0
投票

查看Spring Security指南:https://docs.spring.io/spring-security/site/docs/5.2.0.RELEASE/reference/htmlsingle/#mvc-authentication-principal

它正好解决了这个问题。您甚至可以定义注释,例如@MicaUser,它将解决您的自定义实现。

© www.soinside.com 2019 - 2024. All rights reserved.