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






Вы не можете использовать 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/*
Я тоже последовал вашему ответу, но настоящая проблема заключалась в моем сопоставлении ролей в простом методе предоставленных полномочий. Я исправил это, и это работало нормально.