Приложение весенней загрузки в соответствии с группами ldap

Я использую аутентификацию ldap для защиты весеннего загрузочного приложения. Я хочу авторизовать конечные точки для определенных групп сервера ldap. Какие-либо предложения?

Вот мой файл SecurityConfig.java.

@Override
protected void configure(HttpSecurity http) throws Exception {


    http
            .csrf().disable()
            .authorizeRequests()
            .antMatchers("/403","/login","/footer").permitAll()
            .antMatchers("/","/LifeForm**","/home").fullyAuthenticated()
            //.anyRequest().authenticated()
            .and()
            //.httpBasic()
            //.and()
            .formLogin()
            .loginPage("/login").failureUrl("/403").permitAll()
            .and()
            .logout().logoutUrl("/403").invalidateHttpSession(true).deleteCookies("JSESSIONID").logoutSuccessUrl("/login");
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

    if (Boolean.parseBoolean(ldapEnabled)) {

        auth
                .ldapAuthentication()
                .userSearchFilter("(&(objectClass=user)(sAMAccountName = {0}))")
                .groupRoleAttribute("cn")
                .groupSearchFilter("(&(objectClass=groupOfNames)(member = {0}))")
                .groupSearchBase("ou=groups")
                .contextSource()
                .url(ldapUrls + ldapBaseDn)
                .managerDn(ldapSecurityPrincipal)
                .managerPassword(ldapPrincipalPassword);

    } else {
        auth
                .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER")
                .and()
                .withUser("admin").password("admin").roles("ADMIN");
    }
}

У вас это сработало? Я сейчас борюсь с той же проблемой, и моя конфигурация LDAP похожа на вашу, но мои группы не сопоставляются с органами власти? Приветствуется любая помощь!

craigwor 29.11.2019 10:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
1 580
1

Ответы 1

Попробуйте добавить «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, когда пользователь попытается получить доступ к приложению.

Да, но речь идет о ролях, а не о группах. Верно? Я не знаю имен ролей на своем сервере Ldap. Я хочу авторизовать свое приложение по имени группы

A.A 24.01.2019 11:19

Другие вопросы по теме