Я довольно новичок в Spring Boot и Spring Security. Проходя различные учебные пособия и лекции, я реализовал небольшое приложение Spring Boot и теперь пытаюсь защитить свои конечные точки.
Я создал конфигурацию безопасности, расширяющую WebSecurityConfigurerAdapter
, которую я использую для защиты своего приложения.
public class LoginSecurityConfig extends WebSecurityConfigurerAdapter
{
@Autowired
public void configureGlobal(AuthenticationManagerBuilder authManager) throws Exception
{
authManager
.inMemoryAuthentication()
.withUser("carAdmin").password(passwordEncoder().encode("carAdmin123")).roles("CAR_ADMIN")
.and()
.withUser("driverAdmin").password(passwordEncoder().encode("driverAdmin123")).roles("DRIVER_ADMIN", "DRIVER")
.and()
.withUser("driver").password("driver@123").roles("DRIVER");
}
@Override
protected void configure(HttpSecurity http) throws Exception
{
http
.csrf().disable().formLogin().disable()
.headers().frameOptions().disable().and()
.authorizeRequests()
.antMatchers("/h2-console/**").permitAll()
.antMatchers("/cars/**").hasAnyRole("CAR_ADMIN")
.antMatchers("/drivers/**").hasAnyRole("DRIVER_ADMIN", "DRIVER")
.anyRequest().authenticated();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
И в своем ресурсе RestAPI я использовал @PreAuthorize
.
@GetMapping("/{carId}")
@PreAuthorize("hasRole('ROLE_CAR_ADMIN')")
public CarDTO getCar(@Valid @PathVariable long carId) throws EntityNotFoundException {
return CarMapper.makeCarDTO(carService.find(carId));
}
Я хочу проверить это с помощью Почтальона.
Кроме того, я также видел в Интернете, что мы можем создавать веб-страницы для реализации аутентификации, но я ищу очень простую аутентификацию. Таким образом, я мог бы использовать базовую аутентификацию и Postman для проверки.
В настоящее время при таком подходе я выбираю basic auth
в Почтальоне, передавая имя пользователя и пароль, но получая Forbidden, access denied.
Я не знаю, что я делаю неправильно или как я могу это исправить.
Любая помощь будет оценена.