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

Grails 2.4.2(Ubuntu Tomcat7)中Spring Security登录后重定向至IP的问题

解决Grails 2.4.2登录后重定向至IP地址的问题

我之前也碰到过Grails 2.x在Tomcat下部署后重定向到IP的坑,结合你的场景,给你几个排查和解决的方向:

1. 修正Tomcat Connector配置

Tomcat默认会用自身绑定的IP生成重定向URL,你需要在$TOMCAT_HOME/conf/server.xml的Connector节点里添加代理相关参数,告诉Tomcat真实的域名和协议:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           scheme="https"  <!-- 用HTTPS填https,HTTP填http -->
           proxyName="www.app.com"
           proxyPort="443" <!-- HTTPS对应443,HTTP对应80 -->
           />

如果你的Tomcat前面有反向代理(比如Nginx),还得开启RemoteIpValve来解析代理传递的头部,在server.xml的Engine节点下添加:

<Valve className="org.apache.catalina.valves.RemoteIpValve"
       internalProxies="127.0.0.1" <!-- 填写你的反向代理服务器IP -->
       remoteIpHeader="X-Forwarded-For"
       protocolHeader="X-Forwarded-Proto"
       />

2. 完善Grails配置(不止grails.serverURL)

除了把grails.serverURL改成带协议头的完整地址:grails.serverURL = "https://www.app.com",还要检查Config.groovy里的Spring Security相关配置:

  • 确认grails.plugin.springsecurity.successHandler.defaultTargetUrl没有硬编码IP,改成相对路径或者用${grails.serverURL}/xxx拼接
  • 检查控制器里的重定向逻辑,别用request.serverName这种依赖请求上下文的变量,尽量用Grails自带的createLink标签或者基于grails.serverURL生成URL

3. 检查反向代理(如果存在)的配置

如果你的应用是通过Nginx等反向代理对外提供服务,必须确保代理传递了正确的Host头部,比如Nginx配置里要加:

location / {
    proxy_pass http://localhost:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
}

只有这样Tomcat才能拿到真实的域名www.app.com,而不是自己的内网IP。

4. 清理缓存并重新部署

有时候Grails的编译缓存或者Tomcat的旧war包缓存会导致配置不生效,按以下步骤操作:

  • 在Grails项目根目录执行grails clean,再重新打包war包:grails war
  • 停止Tomcat,删除$TOMCAT_HOME/webapps下的旧应用目录和war包,把新的war包放进去
  • 启动Tomcat,测试登录重定向是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:21:42