我在spring配置服务器中使用spring-cloud-security和@ EnableOAuth2Sso来配置oauth2。在我的oauth提供程序对用户进行身份验证后,我想验证用户是否具有正确的角色。我的第一个想法是我需要添加一个在oAuth身份验证后运行的过滤器。我是否需要扩展WebSecurityConfigurerAdapter并添加过滤器?如果是这样,你能提供如何做的示例代码吗?我已经做了一些搜索尝试将它拼凑在一起,但没有取得任何成功。
答案 0 :(得分:0)
您可以在身份验证期间检查角色,并且为了实现这一点,您可以编写UserDetailsService
的自定义实现。在DaoAuthenticationProvider
进行身份验证期间调用此方法以加载用户详细信息。
@Override
public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {
final AbstractUser user = Optional.ofNullable((AbstractUser) userRepository.findUserByUsername(username)).orElseGet(() -> userTempRepository.findUserByUsername(username));
if (Objects.isNull(user)) {
throw new UsernameNotFoundException(String.format("Username \'%s\' not found.", username));
}
final boolean accountNonLocked = USER_STATUS_ACTIVE.equalsIgnoreCase(user.getStatus());
final List<GrantedAuthority> grantedAuthorities = user.getRoles() == null
? Collections.emptyList()
: user.getRoles().stream()
.map(SimpleGrantedAuthority::new)
.collect(Collectors.toList());
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), true, true,
true, accountNonLocked, grantedAuthorities);
}
答案 1 :(得分:0)
我实现了this教程中描述的authoritiesExtractor方法。这让我可以访问返回的oAuth信息,并允许我检查用户是否处于正确的角色。这似乎正在做我需要的。
我希望在WebSecurityConfigurerAdapter.configure
hasAnyRole
中实现这一点,但我无法弄清楚如何做到这一点。