spring-security Spring安全非常简单的基本身份验证

umuewwlo  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(328)

我尝试用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。
我做错了什么?

2o7dmzc5

2o7dmzc51#

如果您正在执行POST请求,则可能是CSRF保护。在您的application.properties文件中添加logging.level.org.springframework.security=TRACE,并在发出请求后查看控制台输出,以了解发生了什么。
如果它是CSRF保护,我建议您启用它,除非您有要求禁用它。您可以了解有关跨站点请求伪造here的更多详细信息。
同样,如果要在密码中使用{bcrypt}前缀,请使用PasswordEncoderFactories.createDelegatingPasswordEncoder。如果只想使用BCryptPasswordEncoder,则必须删除{bcrypt}前缀

相关问题