gpt4 book ai didi

java - 有没有办法从Spring Security中获取UserId?

转载 作者:太空宇宙 更新时间:2023-11-04 09:39:22 25 4
gpt4 key购买 nike

我想从 Spring Security 中获取用户 ID,目前我找到了这个解决方案:

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

if (principal instanceof UserDetails) {
String username = ((UserDetails) principal).getUsername();
User user = userRepository.findAllByUsername(username);

}

然后使用 user.getId() 方法..是否没有内置方法可以更轻松地获取 ID?或者我可以修改我的 UserDetailsS​​ervice 以包含 ID 吗?

我对这个框架非常陌生。我读到使用另一个存储库可能会有所帮助,但我不想为此目的而使用另一个存储库。

最佳答案

据我了解,您主要关心的是不是每次需要登录用户的 ID 时都重复此代码?如果是这种情况,只需将此代码移至某个服务,例如 UserService:

    @Service
public class UserService {
public User getLoggedInUser(long id) {
// your code from original post goes here
}
}

然后将此服务包含在类中。您打算使用此功能并使用它。假设你的类被称为是一种名为 MyController 的 RestController:

@RestController
public class MyController{
private UserService userService;

public MyController(UserService userService){
this.userService = userService;
}

public void myMethod() {
User authUser = userService.getLoggedInUser();
}
}

或者,如果您只需要 ID,请将方法更改为返回 ID 并使用它:

long userId = userService.getLoggedInUserId();

新 UserService 方法中的代码与上面的问题相同,但在 MyController 中使用它的代码将更具可读性。

如果您仅需要此 ID 来检查权限,请look into使用 @PreAuthorize("hasRole('ROLE_SMTH')") 或 Spring Security 中的其他类似注释。

关于java - 有没有办法从Spring Security中获取UserId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56151044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com