在运行时获取Spring UserDetails对象
我有一个Spring应用程序,用户必须通过3个字段(用户名、部门ID和密码)登录。我想在运行时检索当前登录用户的部门ID 我试过:在运行时获取Spring UserDetails对象,spring,hibernate,spring-boot,spring-security,Spring,Hibernate,Spring Boot,Spring Security,我有一个Spring应用程序,用户必须通过3个字段(用户名、部门ID和密码)登录。我想在运行时检索当前登录用户的部门ID 我试过: SecurityContextHolder.getContext().getAuthentication() 然后尝试将其强制转换为UserDetails对象,但出现一个错误,表示无法强制转换该对象 我还尝试扩展UserDetails接口并添加需要返回的数据,然后实现了新接口,但我也无法强制转换对象。如果使用JWT,则在令牌构建期间添加声明 字符串jwt=Jwts
SecurityContextHolder.getContext().getAuthentication()
然后尝试将其强制转换为UserDetails对象,但出现一个错误,表示无法强制转换该对象
我还尝试扩展UserDetails接口并添加需要返回的数据,然后实现了新接口,但我也无法强制转换对象。如果使用JWT,则在令牌构建期间添加声明 字符串jwt=Jwts.builder() .setSubject(用户名) .索赔(“deptId”,部门ID)
然后从claims.getBody()中获取值。身份验证方法将返回一个
身份验证
对象,您需要对该对象进行适当转换以获取用户详细信息。您缺少getPrincipal();对象主体=SecurityContextHolder.getContext().getAuthentication().getPrincipal();如果(principal instanceof UserDetails){String用户名=((UserDetails)principal).getUsername();}或者{String用户名=principal.toString();}您可能还想添加您试图获取其详细信息的身份验证对象的详细信息。这有什么帮助?