Actuellement, j'ai écrit un module d'authentification et d'autorisation Spring Ldap avec connexion de base http mais maintenant je dois obtenir le nom d'utilisateur et mot de passe d'un cookie dans la demande et les lier à LDAP pour l'authentification.Sécurité printemps Ldap obtenir nom d'utilisateur mot de passe d'un cookie encodé pour l'authentification
ci-dessous est ma config WebSecurity classe
@Configuration
@EnableWebSecurity
public class LdapSecurity extends WebSecurityConfigurerAdapter {
@Autowired
CustomLdapAuthoritiesPopulator customLdapAuthoritiesPopulator;
@Value("${ldap.config.url:ldap://192.168.1.50:389}")
private String LDAP_URL;
@Value("${ldap.config.managerdn:uid=admin,cn=users,cn=accounts,dc=example,dc=test}")
private String MANAGER_DN;
@Value("${ldap.config.managerpwd:admin123}")
private String MANAGER_PWD;
@Value("${ldap.config.basedn:cn=users,cn=accounts,dc=example,dc=test}")
private String SEARCH_BASE;
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.httpBasic().
and().authorizeRequests().
anyRequest().permitAll().
and().
csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Override
protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder
.ldapAuthentication().contextSource().url(LDAP_URL)
.managerDn(MANAGER_DN)
.managerPassword(MANAGER_PWD)
.and()
.userSearchBase(SEARCH_BASE)
.userSearchFilter("uid={0}")
.ldapAuthoritiesPopulator(customLdapAuthoritiesPopulator);
}
}
Ci-dessous est ma classe CustomLdapAuthoritiesPopulator
@Component
public class CustomLdapAuthoritiesPopulator implements LdapAuthoritiesPopulator {
public Collection<? extends GrantedAuthority> getGrantedAuthorities(DirContextOperations userData, String username) {
String[] groups = userData.getStringAttributes("memberof");
List<String> wordList = Arrays.asList(groups);
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
for (String string : wordList) {
if(string.toLowerCase().contains("cn=permissions")){
String parts[] = string.split(",");
String autho[]=parts[0].split("cn=");
System.out.println(autho[1]);
authorities.add(new SimpleGrantedAuthority(autho[1]));
}
}
return authorities;
}
}
Merci à l'avance