You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security授权重定向端点404问题排查求助

问题:Spring Boot 3 中 OAuth2 授权重定向请求返回404

背景

我们正升级至Spring Boot 3/Spring 6,将原Keycloak适配器授权机制替换为Spring Security(原适配器已废弃),该配置在其他服务均正常运行,但某服务出现异常。

依赖配置

"org.springframework:spring-web:6.0.9",
"org.springframework.security:spring-security-config",
"org.springframework.security:spring-security-oauth2-client",
"org.springframework.security:spring-security-oauth2-jose",
"org.springframework.boot:spring-boot-starter-actuator:3.1.1",
"org.springframework.boot:spring-boot-starter-oauth2-client",
"org.springframework.boot:spring-boot-starter-security"

Spring 配置

spring:
  security:
    oauth2:
      client:
        registration:
          keycloak:
            client-id: ${keycloak.resource}
            authorization-grant-type: authorization_code
            scope: openid
            provider: keycloak
            client-secret: ${keycloak.credentials.secret}
        provider:
          keycloak:
            issuer-uri: ${keycloak.server.uri}
            jwk-set-uri: ${keycloak.server.uri}/protocol/openid-connect/certs

Web Security 配置

@EnableWebSecurity
@Configuration
class WebSecurityConfig {
    @Bean
    public SecurityFilterChain authorizeDvUser(final HttpSecurity http) throws Exception {
        http.formLogin(AbstractHttpConfigurer::disable)
                .cors(withDefaults())
                .csrf(AbstractHttpConfigurer::disable)
                .headers(h -> h.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable));


        http.oauth2Login(withDefaults());

        http.securityMatcher("/internal/**")
                .authorizeHttpRequests(req -> req
                        .requestMatchers("/internal/**")
                        .hasRole("our_user"));

        http.authorizeHttpRequests(req -> req
                .anyRequest()
                .permitAll());

        return http.build();
    }
}

问题现象

  • 除/internal/**路径外,其他请求均无需认证(permitAll正常生效)。
  • 访问/internal/**路径时,会被重定向至http://localhost:8444/context_path/oauth2/authorization/keycloak,但该请求返回404。
  • 开启调试日志跟踪过滤器链后发现:重定向确实发起,但处理该请求的OAuth2AuthorizationRequestRedirectFilter从未触发(其他正常服务中该过滤器会正常执行)。
  • 该服务与其他服务的区别:无数据库用于会话持久化,默认使用InMemorySessionRepository(仅单实例运行,满足需求)。

已尝试的方案

手动添加ClientRegistrationRepository Bean,但问题未解决:

@Bean
public ClientRegistrationRepository clientRegistrationRepository(final OAuth2ClientProperties clientProperties) {
    final var mapper = new OAuth2ClientPropertiesMapper(clientProperties);
    final ClientRegistration keycloak = mapper.asClientRegistrations().get("keycloak");
    return new InMemoryClientRegistrationRepository(keycloak);
}

疑问

请问该行为的原因是什么?还有哪些排查方向?


内容的提问来源于stack exchange,提问作者daniu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:25:28