我应该如何扩展com.microsoft.azure.spring.autoconfigure.aad.userprincipal?

2j4z5cfb  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(388)

我在前端使用msal(pkce)和 azure-active-directory-spring-boot-starter 在服务器上提供表示已登录用户及其声明的实体。
我已经建立了一个类来 Package 微软的 UserPrincipal 为了方便获得众所周知的索赔:

import com.microsoft.azure.spring.autoconfigure.aad.UserPrincipal;
public class MyCustomUser {
    private UserPrincipal userPrincipal;

    public MyCustomUser(UserPrincipal userPrincipal) {
        this.userPrincipal = userPrincipal;
    }

    public String getEmployeeId() {
        return String.valueOf(this.userPrincipal.getClaim("emplid"));
    }
}

我通过一个helper类提供这个

@Component
public class MyAppSecurityContext {
    public MyCustomUser getUser() {
        UserPrincipal principal = (UserPrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        return new MyCustomUser(principal);
    }
}

然后在我的服务层中使用它:

@Service
public class AnnouncementServiceImpl implements AnnouncementService {

    @Autowired
    private MyAppSecurityContext securityContext;

    @Override
    public List<Announcement> saveAnnouncement(Announcement announcement) {
        MyCustomUser currentUser = this.securityContext.getUser();
        String empid = currentUser.getEmployeeId();

        return this.announcementRepository.saveAnnouncement(empid, announcement);
    }
}

这是可行的,但感觉不对。我想让我的客户 extend userprincipal和have getPrincipal() 返回我的自定义类型(没有有效地重新实现我自己的 UserPrincipal )而不是在成员对象前面提供一个facade。问题是userprincipal的构造函数需要jwt关注点,这表明这不是正确的方法。是否有另一种更合适的方法来为仅依赖于客户端声明的spring安全项目的用户建模?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题