Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring mvc从登录用户获取用户id_Java_Spring_Spring Mvc_Spring Security - Fatal编程技术网

Java Spring mvc从登录用户获取用户id

Java 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

我使用SpringSecurity登录和注销,一切正常

我可以从登录用户处获取用户名,但我需要用户名

我想知道如何从登录用户处获取用户作为对象,或者如何获取用户ID

 @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();