为什么user.getRole()在此Spring 3.0身份验证示例中设置为GrantedAuthority?

时间:2010-08-08 18:18:49

标签: java authentication spring-security

我正在尝试了解Spring 3.0身份验证。

在下面的代码中,为什么user.getRole()设置为GrantedAuthority

public final UserDetails loadUserByUsername(final String username)
{
    final List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
    UserAccount user = (UserAccount) memcacheService.get(username);

    if (user == null)
    {
        final Query query = entityManager.createQuery("SELECT u FROM UserAccount u WHERE username = :username");
        query.setParameter(USERNAME, username);

        try
        {
            user = (UserAccount) query.getSingleResult();

            memcacheService.put(username, user, Expiration.byDeltaSeconds(DEFAULT_EXPIRATION));
        }
        catch (NoResultException e)
        {
            return null;
        }
    }

    authorities.add(new GrantedAuthorityImpl(user.getRole()));

    return new EnhancedUser(user.getUsername(), user.getEmail(), user.getDisplayName(), user.getPassword(), user
        .getSalt(), user.isEnabled(), user.isAccountNonExpired(), user.isCredentialsNonExpired(), user.isAccountNonLocked(),
        authorities);
}

1 个答案:

答案 0 :(得分:3)

在3.0中,UserDetails对象必须将权限维护为GrantedAuthority实现的列表。如果需要对角色进行一些复杂或自定义处理,那么应用程序开发人员应该编写自己的GrantedAuthority实现。但在大多数情况下,权限只是基于定义为String的角色,因此spring-security开箱即用提供GrantedAuthority GrantedAuthorityImpl的基于String角色的实现的默认简单实现,即{{1}}。

我希望这是你想知道的bcz这个问题有点不清楚。