我对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.
我不知道自己在做错什么或如何解决。
任何帮助将不胜感激。
答案 0 :(得分:1)
尝试将@EnableWebSecurity
添加到LoginSecurityConfig
中,看来您尚未启用基本身份验证。您可以这样启用它:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable().formLogin().disable()
...
http.httpBasic();
}