【问题标题】:Why is user.getRole() set as the GrantedAuthority in this Spring 3.0 authentication example?为什么在这个 Spring 3.0 身份验证示例中将 user.getRole() 设置为 GrantedAuthority?
【发布时间】:2010-08-08 18:18:49
【问题描述】:

我正在尝试了解 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);
}

【问题讨论】:

    标签: java authentication spring-security


    【解决方案1】:

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

    我希望这是你想知道的,因为问题有点不清楚。

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2016-12-18
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多