Java Spring mvc从登录用户获取用户id
我使用SpringSecurity登录和注销,一切正常 我可以从登录用户处获取用户名,但我需要用户名 我想知道如何从登录用户处获取用户作为对象,或者如何获取用户IDJava Spring mvc从登录用户获取用户id,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,我使用SpringSecurity登录和注销,一切正常 我可以从登录用户处获取用户名,但我需要用户名 我想知道如何从登录用户处获取用户作为对象,或者如何获取用户ID @RequestMapping("/contato") public String contato(Model model, Principal principal ){ String userName = principal.getName(); model.addAttribute("userName",u
@RequestMapping("/contato")
public String contato(Model model, Principal principal ){
String userName = principal.getName();
model.addAttribute("userName",userName);
System.out.println(userName);
return "contato";
}
豆子
}
有人能帮我从登录用户那里获取用户id吗
我也尝试过使用
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Users user =(Users)authentication.getPrincipal();
但是它仍然不起作用最简单的方法是利用
UserDetails
和UserDetails服务
接口
编写一个简单的UserDetails服务:
@Service
public class CustomUserDetailsService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return findUserByUsername(username); //load the user from somewhere (e.g. Database)
}
}
让您的Users
类实现UserDetails
界面:
public class Users implements UserDetails {
private String username;
private String userId;
private String password;
private String role;
public Users(String username, String userId, String password, String role) {
this.username = username;
this.userId = userId;
this.password = password;
this.role = role;
}
//...
}
最后,当您调用此静态方法时,您将收到Users
对象,您可以从中提取userId:
Users user = (Users) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
您是否有
UserDetailsService
?否我没有UserDetailsService仍不工作请求处理失败;嵌套异常为java.lang.ClassCastException:org.springframework.security.core.userdetails.User无法强制转换为com.caveofprograming.spring.web.dao.UsersDid您在安全配置中应用了用户详细信息服务吗?抱歉,我是一个乞丐,我所做的是创建了以下类服务公共类CustomUserDetails服务实现UserDetails服务{覆盖公共UserDetails loadUserByUsername(字符串用户名)抛出UsernameNotFoundException{返回loadUserByUsername(用户名);//从某处(例如数据库)加载用户}然后在users类中,我实现了userDetails公共类users实现了userDetails{添加了两个新变量role和userid,并为username、userid、role和password创建了一个新的构造函数,这基本上就是我上面的建议。它对您有用吗?如果没有,请在GitHub上共享一个指向最小示例项目的链接。谢谢。
Users user = (Users) SecurityContextHolder.getContext().getAuthentication().getPrincipal();