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

Azure Application Gateway WAF下Spring Security表单登录跳转异常如何解决

这个问题的核心是接入Azure Application Gateway反向代理后,Spring Boot应用没有正确识别代理传递的请求头,生成重定向地址时默认使用了后端服务自身的主机地址,而非网关地址。

解决方案步骤

第一步:配置Spring Boot识别反向代理请求头

Azure Application Gateway默认会携带X-Forwarded-*系列请求头,包含网关的主机地址、协议等信息,只需开启Spring Boot对该类头的识别即可自动适配重定向地址。
在application.properties配置文件中添加以下配置:

# Spring Boot 2.2+ 版本使用该配置
server.forward-headers-strategy=native
# 若使用低于2.2的版本,替换为以下配置
# server.use-forward-headers=true

如果网关和后端服务不在同一个内网段,可以额外配置可信代理地址段:

server.tomcat.remoteip.trusted-proxies=你的Azure网关内网IP段,多个用逗号分隔

第二步:修正Spring Security配置

移除所有硬编码的IP_ADDRESS前缀,全部改用相对路径,Spring会自动根据识别到的代理信息生成正确的网关地址:

.authorizeRequests()
    .antMatchers(
    "/resources/**",
    "/static/**",
    "/webjars/**",
    "/javax.faces.resource/**",
    "/",
    "/nadp.xhtml",
    "/notfound.xhtml",
    "/login.xhtml")
    .permitAll()
    .antMatchers("/admin/**")
    .access(accessStringProvider.createAccessString())
    .anyRequest()
    .authenticated()
    .and()
    .formLogin()
    .loginPage("/login.xhtml")
    // 移除IP_ADDRESS前缀,使用相对路径
    .failureUrl("/login.xhtml?error=true")
    .defaultSuccessUrl("/admin/index.xhtml", true)
    .and()
    .logout()
    .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
    // 移除IP_ADDRESS前缀,使用相对路径
    .logoutSuccessUrl("/nadp.xhtml")
    .deleteCookies("JSESSIONID")
    .invalidateHttpSession(true)
    .clearAuthentication(true)

第三步:确认Azure Application Gateway配置

检查网关的后端设置,确认已开启「传递X-Forwarded-For标头」选项,该选项默认开启,确保X-Forwarded-Host、X-Forwarded-Proto头正常传递到后端服务。

异常原因说明

之前将loginPage改为绝对地址后登录失效的原因是:当loginPage配置为绝对地址时,Spring Security会默认判定该登录页为外部站点,不会自动处理对应路径的登录请求校验,需要额外手动指定loginProcessingUrl为相对路径才能生效,而使用X-Forwarded头的方案更符合反向代理场景的最佳实践,无需修改现有表单逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:27:05