Попробуйте добавить «antMatcher», который проверяет один авторитет в Ldap.
Например:
.antMatchers("/admins").hasAuthority("GROUP-SPAIN")
У меня есть эта конфигурация в моем приложении
@Override
public void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests()
//.antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
// allow anonymous resource requests
.antMatchers(
HttpMethod.GET,
"/",
"/v2/api-docs", // swagger
"/webjars/**", // swagger-ui webjars
"/swagger-resources/**", // swagger-ui resources
"/configuration/**", // swagger configuration
"/*.html",
"/favicon.ico",
"/**/*.html",
"/**/*.css",
"/**/*.js"
).permitAll()
.antMatchers("/auth/**").permitAll()
.antMatchers("/management/**/*", "/management/*.json").hasAuthority("ADMIN")
.antMatchers("/admins").hasAuthority("GROUP-SPAIN"")
.anyRequest().authenticated();
}
Вам необходимо создать класс UserDetailsService для добавления необходимых вам полномочий вместо группы пользователей. В этом примере я использую базу данных в качестве примера, вам нужно изменить мой userDao для вашего соединения ldap.
@Component
public class TodoListUserDetailsService implements UserDetailsService {
@Autowired
private UserDao userDao; //Change for ldap conection
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//Get the user from ldap.
AppUser user = userDao.findByUsername(username);
if (null == user) {
throw new UsernameNotFoundException(String.format("Username {0} doesn't exist", username));
}
List<GrantedAuthority> authorities = new ArrayList<>();
//this part is pseudocode
user.getGroups().forEach(ldapGroup -> {
authorities.add(new SimpleGrantedAuthority(ldapGroup.toString()));
});
UserDetails userDetails = new User(user.getUsername(), user.getPassword(), authorities);
return userDetails;
}
}
Spring будет использовать ваш UserDetailsService, когда пользователь попытается получить доступ к приложению.