spring boot oauth2角色过滤器

时间:2018-03-14 23:20:25

标签: spring spring-boot spring-security-oauth2 spring-cloud-config

我在spring配置服务器中使用spring-cloud-security和@ EnableOAuth2Sso来配置oauth2。在我的oauth提供程序对用户进行身份验证后,我想验证用户是否具有正确的角色。我的第一个想法是我需要添加一个在oAuth身份验证后运行的过滤器。我是否需要扩展WebSecurityConfigurerAdapter并添加过滤器?如果是这样,你能提供如何做的示例代码吗?我已经做了一些搜索尝试将它拼凑在一起,但没有取得任何成功。

2 个答案:

答案 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中实现这一点,但我无法弄清楚如何做到这一点。