Spring 当前用户作为 Hateoas 资源
Spring current user as Hateoas resource
这是我的第一个 Spring 项目。我有一个公开为 RepositoryRestResource 的用户存储库。我为非常基本的身份验证设置了 Spring 安全设置。我想做的是从我的 AuthenticationController return 当前用户的 Hateoas 资源,而无需维护资源组装器。我想从 AuthenticationController 内部使用用户 RepositoryRestResource 并按原样 return 资源。现在,我有这样的东西:
@RestController
public class AuthenticationController {
@RequestMapping("/user")
public Principal user(Principal user) {
return user;
}
}
我可以从 principal 或类似的东西获取用户实体:
Resource<User> getCurrentUser(@ModelAttribute User self){...}
而且我想 return 用户的 Hateoas 资源而不是 Principal,方法是从控制器访问存储库 rest 资源。我怎样才能做到这一点,或者要求它是一件奇怪的事情吗?
使用您的主要详细信息从存储库中检索您的用户实体,例如:
@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
- 替换标准控制器注释以使用基本 REST URI。
- 见@AuthenticationPrincipal
这是我的第一个 Spring 项目。我有一个公开为 RepositoryRestResource 的用户存储库。我为非常基本的身份验证设置了 Spring 安全设置。我想做的是从我的 AuthenticationController return 当前用户的 Hateoas 资源,而无需维护资源组装器。我想从 AuthenticationController 内部使用用户 RepositoryRestResource 并按原样 return 资源。现在,我有这样的东西:
@RestController
public class AuthenticationController {
@RequestMapping("/user")
public Principal user(Principal user) {
return user;
}
}
我可以从 principal 或类似的东西获取用户实体:
Resource<User> getCurrentUser(@ModelAttribute User self){...}
而且我想 return 用户的 Hateoas 资源而不是 Principal,方法是从控制器访问存储库 rest 资源。我怎样才能做到这一点,或者要求它是一件奇怪的事情吗?
使用您的主要详细信息从存储库中检索您的用户实体,例如:
@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
- 替换标准控制器注释以使用基本 REST URI。- 见@AuthenticationPrincipal