Spring Security 无法设置permitAll()方法

plicqrtu  于 2023-03-18  发布在  Spring
关注(0)|答案(1)|浏览(252)

我尝试为permitAll()设置端点/h2-console,以便无需登录即可访问h2控制台。
我的安全配置:

@Configuration
public class SecurityConfig {

    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
    @Bean
    public SCryptPasswordEncoder sCryptPasswordEncoder() {
        return SCryptPasswordEncoder.defaultsForSpringSecurity_v5_8();
    }

    @Order(Ordered.HIGHEST_PRECEDENCE)
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests()
                .requestMatchers("/h2-console/**").permitAll()
                .anyRequest().authenticated()
                .and()
                    .formLogin()
                    .defaultSuccessUrl("/main", true)
                .and()
                .headers().frameOptions().disable();
        return http.build();
    }

}

我也会把所有其他配置的任何情况下:
x一个一个一个一个x一个一个二个x
但是,当我尝试访问localhost:8080/h2-console时,我已重定向到/login页面
UPD:
Spring安全日志:
例如Spring失效。序列应用:在11.758秒内启动SequrityApplication(进程运行时间为12.623)
o.s.安全.网络.过滤器链代理:保护GET /h2-控制台
o.s.s.w.a.匿名身份验证过滤器:将SecurityContextHolder设置为匿名SecurityContext
操作系统HttpSessionRequest缓存:已保存请求http://localhost:8080/h2-console?继续会话
o.s.s.web.默认重定向策略:正在重定向至http://localhost:8080/login
o.a.c.c.C.[Tomcat].[本地主机].[/]:正在初始化Spring调度程序Servlet“调度程序Servlet”

xkrw2x1b

xkrw2x1b1#

链中的另一个安全筛选器可能正在覆盖此配置。
您可以尝试将以下代码添加到securityFilterChain方法中,以显式允许访问H2控制台:

.httpBasic().disable()
.csrf().disable()
.authorizeHttpRequests()
.antMatchers("/h2-console/**").permitAll()
.anyRequest().authenticated()
.and()
.headers().frameOptions().sameOrigin();

这将禁用H2控制台的基本身份验证和CSRF保护,并允许对“/h2-console/**”路径的所有请求无需身份验证。它还将帧选项设置为“sameOrigin”,以防止控制台显示不正确的问题。
请注意,在生产环境中保持H2控制台的安全非常重要,因为它提供了对数据库的直接访问。
如果您正在测试配置文件/环境,则将此配置添加到securityFilterChain测试中...

相关问题