如何使用Postman解决HTTP-403 Forbidden Spring Boot基本身份验证

时间:2019-06-10 13:00:20

标签: spring spring-boot spring-security

我对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 个答案:

答案 0 :(得分:1)

尝试将@EnableWebSecurity添加到LoginSecurityConfig中,看来您尚未启用基本身份验证。您可以这样启用它:

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

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

    http.httpBasic();
}