我尝试用Sping Boot 实现一个非常简单的BASIC身份验证,而不使用过时的WebSecurityConfigurerAdapter
。
@Configuration
public class SecurityConfig {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().antMatchers("/a", "/b", "/c", "/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html");
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic();
return http.build();
}
@Bean
public InMemoryUserDetailsManager userDetailsService() {
UserDetails user = User.builder()
.username("user")
.password("{bcrypt}$2y$10$rUzpfbTx9lcIs6N4Elcg2e2DGM4wMwkx0ixom7qLW5kYnztRgT.a2")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
被忽略的端点工作(带有警告:You are asking Spring Security to ignore Ant [pattern='/swagger-ui.html']. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead.
)。对于另一个,我得到一个HTTP 403。
我做错了什么?
1条答案
按热度按时间2o7dmzc51#
如果您正在执行POST请求,则可能是CSRF保护。在您的
application.properties
文件中添加logging.level.org.springframework.security=TRACE
,并在发出请求后查看控制台输出,以了解发生了什么。如果它是CSRF保护,我建议您启用它,除非您有要求禁用它。您可以了解有关跨站点请求伪造here的更多详细信息。
同样,如果要在密码中使用
{bcrypt}
前缀,请使用PasswordEncoderFactories.createDelegatingPasswordEncoder
。如果只想使用BCryptPasswordEncoder
,则必须删除{bcrypt}
前缀