В Spring Security пользователь и администратор могут войти в систему, но не могут получить доступ к API (что дает 403 запрещенную ошибку)

Я новичок и изучаю весеннюю загрузку и весеннюю безопасность, и здесь я пытаюсь создать приложение EmployeeManagement, которое может выполнять операции CRUD для сотрудников. В этом администратор должен иметь возможность динамически добавлять пользователей в базу данных, а администратор должен иметь разрешение на все API, в то время как Пользователь должен иметь разрешение на просмотр только сотрудников. Я создал все необходимое, и мой проект работал хорошо до добавления весенней безопасности, но после его добавления мой пользователь и администратор могут войти в систему, но не могут получить доступ ни к одному из API. показывает ошибку 403, запрещенную, и я не могу понять, почему весенняя безопасность не дает разрешения на доступ к URL-адресам в соответствии с упомянутыми ролями в методе настройки (http-безопасность) (в этом проекте я использовал базу данных MySQl, spring-boot, spring безопасность и swagger-интерфейс)

Это моя конфигурация безопасности

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(encodePWD());
    }

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

        http.authorizeRequests()
                .antMatchers("/secure/**").hasRole("ADMIN").and().authorizeRequests()
                .antMatchers("/", "/employees/save", "/employees/updateEmployee/{id}", "/employees/deleteEmployee/{id}")
                .hasRole("ADMIN").and().authorizeRequests()
                .antMatchers("/", "/employees/list", "/employees/getEmployee/{id}",
                        "/employees/getAllEmployeesWithTheseName/{firstname}",
                        "/employees/getEmployeesCustomSortedByName/{direction}")
                .hasAnyRole("ADMIN", "USER")
                .and()
                .httpBasic().and().formLogin().loginProcessingUrl("/login")
                .defaultSuccessUrl("/swagger-ui.html", true).and().cors().and().csrf().disable();

    }

    @Bean
    public BCryptPasswordEncoder encodePWD() {
        return new BCryptPasswordEncoder();
    }

}

Это ошибка, которую я получаю


{
"timestamp": "2022-11-07T15:59:26.930+00:00",
"status": 403,
"error": "Forbidden",
"message": "Forbidden",
"path": "/EmployeeManagement/employees/list"
}
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете использовать PathVariable в antMatchers(....)

Из документации AntPathMatcher

Сопоставление сопоставляет URL-адреса по следующим правилам:

  • ? соответствует одному символу
  • * соответствует нулю или более символов
  • ** соответствует нулю или более каталогам в пути
  • {spring:[a-z]+} соответствует регулярному выражению [a-z]+ как переменной пути с именем "spring"

Так что используйте:

  • "/employees/getEmployee/{id:[0-9]+}" или "/employees/getEmployee/*
  • "/employees/getAllEmployeesWithTheseName/{firstname:[A-Za-z]+}" или "/employees/getAllEmployeesWithTheseName/*

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

Rajat singh 08.11.2022 09:45

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