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

如何从ViewControllerRegistry排除无/api前缀的OAuth2重定向URI

问题根因

你现有配置的路径转发规则,仅对根路径下第一级为api的路径做了转发排除,而OAuth2回调路径/oauth/redirect的第一级路径为oauth,未被纳入排除范围,因此会命中二级路径转发规则,被错误转发到前端index.html。

修改方案

无需新增额外配置类,直接调整现有路径匹配规则的正则负向断言,将oauth加入一级路径排除列表即可。注意Spring MVC的视图控制器按注册顺序匹配,优先级从上到下递减,无需调整现有规则的注册顺序。

修改后的完整配置代码:

@Configuration
public class WebRouteConfig implements WebMvcConfigurer {
     
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 根路径转发到前端入口
        registry.addViewController("/")
                .setViewName("forward:/index.html");

        // 单级路径转发,不会匹配多级路径(如/api/**、/oauth/redirect)
        registry.addViewController("/{x:[\\w\\-]+}")
                .setViewName("forward:/index.html");
        
        // 二级路径:排除第一级为api、oauth的路径,这类路径直接交由后端控制器处理
        registry.addViewController("/{x:^(?!api$|oauth$).*$}/{y:[\\w\\-]+}")
                .setViewName("forward:/index.html");
        
        // 自定义/ABC/前缀的多级路径:同步排除api、oauth前缀的一级路径
        registry.addViewController("/{x:^(?!api$|oauth$).*$}/ABC/{y:[\\w\\-]+}")
                .setViewName("forward:/index.html");       
    }
}
扩展说明

如果后续还有其他需要后端直接处理的根路径前缀(比如/login、/error、/actuator等),直接在正则的负向断言中通过|分隔追加即可,示例:
/{x:^(?!api$|oauth$|login$|error$|actuator$).*$}/{y:[\\w\\-]+}

修改后路由逻辑如下:

  • 所有/api/**请求:正常走后端接口逻辑,不触发前端转发
  • 所有/oauth/**二级请求(包含/oauth/redirect):不命中转发规则,直接进入Spring Security的OAuth2认证流程
  • 其余符合规则的前端路由路径:正常转发到index.html,由React路由接管渲染,不会出现刷新404问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:48:54