如果我只知道用户名,Spring Security是否可以获取用户的所有角色?我在考虑这样的事情:
List<String> userRoles=veryCleverObject.getRolesByUsername("user123");
我知道如何为当前用户执行此操作,但不知道如何为任何用户执行此操作。我的解决方法是从数据库中使用JpaRepository查询它,但由于显而易见的原因,这不是一个好的解决方案。
我需要在我的应用程序中使用简单的用户管理模块,我会列出用户,并希望显示他们的角色。
我如何在Spring Security中执行此操作?
答案 0 :(得分:1)
一般情况下:不,因为可以通过AuthenticationProvider
甚至AuthenticationManager
进行身份验证,这通常需要一些凭据和用户名;更重要的是,他们要求将这些数据打包在一些Authentication
类实例中。通常,您没有任何凭据,只有用户名,并且您不知道如何以通用方式构建Authentication
。
但是如果您只使用基于UserDetailsService
的机制(如JDBC身份验证http://www.mkyong.com/spring-security/spring-security-form-login-using-database/或LDAP身份验证https://spring.io/guides/gs/authenticating-ldap/,您可以使用具有以下方法的UserDetailsService
实例:
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
它通过用户名找到UserDetails
,您可以从中获得用户角色(也称为授权机构)。
UserDetailsService
可以通过依赖注入获得。