У меня есть приложение 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);
}