Как разрешить простую аутентификацию HTTP-403 Forbidden Spring Boot с помощью Почтальона - PullRequest
0 голосов
/ 10 июня 2019

Я довольно новичок в 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.

Я не знаю, что я делаю неправильно или как я могу это исправить.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 10 июня 2019

Попробуйте добавить @EnableWebSecurity к вашему LoginSecurityConfig, и кажется, что вы не включили базовую аутентификацию. Вы можете включить его так:

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

    http
        .csrf().disable().formLogin().disable()
        ...

    http.httpBasic();
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...