我刚刚开始学习Spring Security。我可以使用 Postman 访问它,但无法使用 OpenApi 访问它。可能是什么问题?在我更新并添加安全性之前它就可以工作。 Spring Boot 3.0.6 版本 Spring Security 第 6 版。 这是我的代码:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public UserDetailsService userDetailsService(PasswordEncoder encoder){
UserDetails admin = User.withUsername("msg")
.password(encoder.encode("123"))
.roles("ADMIN", "USER")
.build();
UserDetails user = User.withUsername("user")
.password(encoder.encode("123"))
.roles("USER")
.build();
return new InMemoryUserDetailsManager(admin, user);
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
return http.httpBasic()
.and()
.authorizeHttpRequests()
.requestMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html").permitAll()
//.requestMatchers("/users").authenticated()
.requestMatchers(HttpMethod.POST,"/users/**").hasRole("USER")
.requestMatchers("/users/**").hasRole("ADMIN")
.and()
.csrf().disable()
.formLogin().disable()
.build();
}
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
pom.xml
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-security</artifactId>
<version>1.7.0</version>
</dependency>
我后来添加了“springdoc-openapi-security”,因为它不起作用。但是添加之后还是不行。
OpenAPI 正在为所有请求发送 HTTP 403 错误。网址是http://localhost:9090/swagger-ui.html。
编辑*
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.1.0</version>
</dependency>
开放API新版本。这是Spring Boot 3.0支持的版本。当我改变它时,一切都固定了。
对于 spring-boot v3 支持,请确保使用 springdoc-openapi v2