如何在Spring Security中通过用户ID获取用户的所有角色?

时间:2017-06-16 11:02:05

标签: spring spring-security

如果我只知道用户名,Spring Security是否可以获取用户的所有角色?我在考虑这样的事情:

List<String> userRoles=veryCleverObject.getRolesByUsername("user123");

我知道如何为当前用户执行此操作,但不知道如何为任何用户执行此操作。我的解决方法是从数据库中使用JpaRepository查询它,但由于显而易见的原因,这不是一个好的解决方案。

我需要在我的应用程序中使用简单的用户管理模块,我会列出用户,并希望显示他们的角色。

我如何在Spring Security中执行此操作?

1 个答案:

答案 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可以通过依赖注入获得。