Spring mvc Sprint Rest AuthenticationPrincipal仅返回空值的customUser
我正在尝试在spring boot REST后端获取当前登录的用户(基本身份验证):Spring mvc Sprint Rest AuthenticationPrincipal仅返回空值的customUser,spring-mvc,spring-security,Spring Mvc,Spring Security,我正在尝试在spring boot REST后端获取当前登录的用户(基本身份验证): @RequestMapping(value = "/someURL", method = RequestMethod.GET) public @ResponseBody Map someMethod( Authentication auth, // <==== works @AuthenticationPrincipal(expression = "liquidoUserModel") Us
@RequestMapping(value = "/someURL", method = RequestMethod.GET)
public @ResponseBody Map someMethod(
Authentication auth, // <==== works
@AuthenticationPrincipal(expression = "liquidoUserModel") UserModel liquidoUserModel
)
{
log.debug(auth.getPrincipal()) // <==== THIS WORKS
log.debug(liquidoUserModel) // <==== returns an intance with empty fields
}
这是我的用户详细信息服务
public class LiquidoUserDetailsService implements UserDetailsService {
@Autowired
UserRepo userRepo;
@Override
public LiquidoAuthUser loadUserByUsername(String email) throws UsernameNotFoundException {
UserModel userModel = userRepo.findByEmail(email);
return new LiquidoAuthUser(userModel.getEmail(), userModel.getPasswordHash(), getGrantedAuthorities(userModel), userModel);
}
}
最后是liquidauthuser
public class LiquidoAuthUser extends User {
private UserModel liquidoUserModel;
public LiquidoAuthUser(String username, String password, Collection<? extends GrantedAuthority> authorities, UserModel liquidoUserModel) {
super(username, password, authorities);
this.liquidoUserModel = liquidoUserModel;
}
public UserModel getLiquidoUserModel() {
return liquidoUserModel;
}
public void setLiquidoUserModel(UserModel userModel) {
this.liquidoUserModel = userModel;
}
}
公共类LiquidoAuthUser扩展用户{
私有用户模型liquidoUserModel;
公共LiquidoAuthUser(字符串用户名、字符串密码、集合我尝试并调试了您的代码,但未能找到问题
@AuthenticationPrincipal。通常,此批注由spring security web批注的AuthenticationPrincipalArgumentResolver类解决。通过使用@EnableWebSecurity,您将自动将其添加到spring MVC配置中。需要调试更多有关AuthenticationPrincipalArgumentResolver的信息,我将暂时建议使用身份验证类获取您的对象
public class LiquidoAuthUser extends User {
private UserModel liquidoUserModel;
public LiquidoAuthUser(String username, String password, Collection<? extends GrantedAuthority> authorities, UserModel liquidoUserModel) {
super(username, password, authorities);
this.liquidoUserModel = liquidoUserModel;
}
public UserModel getLiquidoUserModel() {
return liquidoUserModel;
}
public void setLiquidoUserModel(UserModel userModel) {
this.liquidoUserModel = userModel;
}
}