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

修改OAuth2AuthorizationRequestRedirectFilter的BaseURI后重定向异常

根因分析

Spring Security OAuth2 授权请求重定向过滤器OAuth2AuthorizationRequestRedirectFilter的默认路径匹配规则为 baseUri + /{registrationId},其中{registrationId}是必填路径变量,用来定位你配置的对应OAuth客户端注册信息,因此直接访问你配置的baseUri本身无法命中匹配规则。
你手动拼接/github/oauth2/authorization/GitHub后仍提示匹配/github/oauth2/authorization/GitHub/{registrationId},大概率是配置中重复调用了.baseUri()方法,或者常量定义拼接了多余的路径后缀,可先检查配置是否仅设置了一次授权端点基础URI。

解决方案

方案一:适配框架默认规则(改动最小,推荐使用)

无需修改框架逻辑,仅需调整你接口返回的登录地址,在配置的baseUri后拼接你GitHub客户端的registrationId即可。比如你的GitHub客户端注册ID为github,则返回登录地址为/github/oauth2/authorization/github。
同时需要同步配置回调端点的基础URI,避免后续回调匹配失败:

.oauth2Login()
.authorizationEndpoint()
.baseUri(GitHubRequestPaths.GITHUB_OAUTH_REDIRECT)
.and()
.redirectionEndpoint()
.baseUri("/github/oauth2/code/*") // 需和你在GitHub平台配置的回调地址前缀保持一致

方案二:自定义匹配逻辑(适配固定登录地址需求)

如果业务要求必须使用/github/oauth2/authorization作为固定登录入口,不需要在路径中携带registrationId,可以自定义过滤器替换框架默认实现:

  1. 自定义重定向过滤器,固定返回GitHub客户端的注册ID:
public class CustomOAuth2AuthRequestRedirectFilter extends OAuth2AuthorizationRequestRedirectFilter {
    // 替换为你自己的GitHub客户端注册ID
    private static final String GITHUB_REG_ID = "github";

    public CustomOAuth2AuthRequestRedirectFilter(ClientRegistrationRepository clientRepo, String baseUri) {
        super(clientRepo, baseUri);
        // 替换默认请求匹配器,直接匹配你的固定登录地址
        this.setRequiresAuthorizationRequestMatcher(new AntPathRequestMatcher("/github/oauth2/authorization"));
    }

    @Override
    protected String resolveRegistrationId(HttpServletRequest request) {
        // 固定返回GitHub的注册ID,无需从路径变量取值
        return GITHUB_REG_ID;
    }
}
  1. 在安全配置类中添加自定义过滤器,替换默认实现:
@Autowired
private ClientRegistrationRepository clientRegistrationRepository;

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .oauth2Login()
        .authorizationEndpoint()
        .baseUri(GitHubRequestPaths.GITHUB_OAUTH_REDIRECT)
        .and()
        .redirectionEndpoint()
        .baseUri("/github/oauth2/code/*")
        .and()
        // 其他安全配置省略
        .and()
        // 将自定义过滤器添加到默认过滤器之前,替换原有逻辑
        .addFilterBefore(
            new CustomOAuth2AuthRequestRedirectFilter(clientRegistrationRepository, GitHubRequestPaths.GITHUB_OAUTH_REDIRECT),
            OAuth2AuthorizationRequestRedirectFilter.class
        );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:06:03