Spring当前用户作为Hateoas资源

Spring当前用户作为Hateoas资源,spring,security,hateoas,Spring,Security,Hateoas,这是我的第一个春季项目。我有一个作为RepositoryRestResource公开的用户存储库。我已经为非常基本的身份验证设置了Spring安全性。我想做的是从AuthenticationController返回当前用户的Hateoas资源,而不必维护资源汇编程序。我想从AuthenticationController内部使用用户RepositoryRestResource并按原样返回资源。现在,我有这样的想法: @RestController public class Authenticat

这是我的第一个春季项目。我有一个作为RepositoryRestResource公开的用户存储库。我已经为非常基本的身份验证设置了Spring安全性。我想做的是从AuthenticationController返回当前用户的Hateoas资源,而不必维护资源汇编程序。我想从AuthenticationController内部使用用户RepositoryRestResource并按原样返回资源。现在,我有这样的想法:

@RestController
public class AuthenticationController {

    @RequestMapping("/user")
    public Principal user(Principal user) {
        return user;
    }
}
我可以从主体获取用户实体,或者使用类似的方式:

Resource<User> getCurrentUser(@ModelAttribute User self){...}
资源getCurrentUser(@ModelAttribute用户self){…}

我希望通过从控制器访问存储库rest资源来返回用户的Hateoas资源,而不是主体。我如何才能做到这一点,或者这是一件奇怪的事情吗?

使用您的主要详细信息从存储库中检索您的用户实体,例如:

@BasePathAwareController
public class MyUserController {

  @Autowired UserAccountRepository repository;

  @GetMapping("/user")
  @ResponseBody
  public Resource<?> getUser(@AuthenticationPrincipal UserDetails principal, PersistentEntityResourceAssembler assembler) {

    if (null==principal) {
      return null;
    }

    UserAccount user = repository.findByUsername(principal.getUsername());
    return assembler.toFullResource(user);
  }
}
@BasePathAwareController
公共类MyUserController{
@自动连线UserAccountRepository;
@GetMapping(“/user”)
@应答器
公共资源getUser(@AuthenticationPrincipal UserDetails principal,PersistentEntityResourcesAssembler汇编程序){
if(null==主体){
返回null;
}
UserAccount user=repository.findByUsername(principal.getUsername());
返回assembler.toFullResource(用户);
}
}
注:

  • @BasePathAwareController
    -替换标准控制器注释以使用基本REST URI