我正在尝试了解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);
}
答案 0 :(得分:3)
在3.0中,UserDetails
对象必须将权限维护为GrantedAuthority
实现的列表。如果需要对角色进行一些复杂或自定义处理,那么应用程序开发人员应该编写自己的GrantedAuthority
实现。但在大多数情况下,权限只是基于定义为String的角色,因此spring-security开箱即用提供GrantedAuthority
GrantedAuthorityImpl
的基于String角色的实现的默认简单实现,即{{1}}。
我希望这是你想知道的bcz这个问题有点不清楚。