Spring Security - запретить вход в систему, если отсутствует роль - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть приложение Spring, которое использует аутентификацию LDAP для аутентификации пользователей, объедините это с настраиваемым популятором полномочий, и я могу правильно войти в свое приложение.Однако я хочу запретить пользователям входить в систему полностью, если у них нет определенной роли.

Я попытался создать обработчик успеха входа в систему, который будет получать роли от объекта Authentication и * 1004.* если они не соответствуют требованиям, но это, кажется, слишком поздно и все еще позволяет пользователю продолжить.

Я мог бы создать собственный поставщик аутентификации, но из-за того, что LdapAuthenticationProviderConfigurer настолько полезен, яне желая делать это, если это возможно.

В настоящее время у меня настроена защита с этим:

auth.ldapAuthentication()
        .userSearchBase(ldapBase)
        .userSearchFilter(ldapFilter)
        .ldapAuthoritiesPopulator(new AuthorityPopulator(client))
        .contextSource(contextSource());

И мой обработчик успеха:

protected void handle(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException {
    String targetUrl = determineTargetUrl(request, response);
    List<String> roles = authentication.getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());
    if(!roles.contains("admin")) {
        authentication.setAuthenticated(false);
    }

    redirectStrategy.sendRedirect(request, response, targetUrl);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...