Spring Security Kotlin DSL配置无法放行h2-console问题求助
Spring Security Kotlin DSL无法放行H2 Console访问的问题解决
问题核心在于Kotlin DSL与传统链式调用中路径匹配器的默认实现不同:
- 传统链式调用显式使用了
AntPathRequestMatcher,它的匹配规则更宽松,能正确匹配H2 Console的路径(包括带.jsp后缀和参数的URL)。 - Kotlin DSL中直接传入字符串路径时,默认使用
MvcRequestMatcher,它遵循Spring MVC的路径匹配规则(比如可能忽略后缀、要求路径符合控制器映射规范),而H2 Console的请求不属于Spring MVC处理范畴,导致匹配失败。
解决方案:在Kotlin DSL中显式使用AntPathRequestMatcher修改权限配置
修改后的Kotlin DSL代码如下:
@Bean fun securityFilterChainDSL(http: HttpSecurity): SecurityFilterChain { http { cors { disable() } csrf { disable() } exceptionHandling { authenticationEntryPoint = unauthorizedHandler } authorizeRequests { authorize("/api/v1/auth/**", permitAll) authorize("/api/v1/swagger/**", permitAll) authorize("/swagger**/**", permitAll) // 显式指定AntPathRequestMatcher匹配H2 Console所有子路径 authorize(AntPathRequestMatcher("/h2-console/**"), permitAll) authorize(anyRequest, authenticated) } sessionManagement { sessionCreationPolicy = SessionCreationPolicy.STATELESS } headers { frameOptions { disable() } } addFilterBefore<UsernamePasswordAuthenticationFilter>(filter = jwtAuthenticationFilter) } return http.build() }
额外说明
- 路径模式调整为
/h2-console/**即可覆盖所有子路径(包括/h2-console/login.jsp这类具体页面),无需写成/h2-console**/**。 - 你已配置的禁用CSRF和Frame Options是H2 Console正常访问的必要前提,无需修改。
内容的提问来源于stack exchange,提问作者Anıl Şenocak
相关产品推荐
相关产品推荐

